信頼性ActiveMQ--メッセージ

永続的(永続)

  • messageProducer.setDeliverMode(DeliverMode.NON_PERSISTENT);非永続:サーバがダウンしている場合、メッセージが存在しません
  • messgageProducer.setDeliveryMode(はDeliveryMode.PERSISTENT);永続性:サーバがダウンしている、メッセージ残ります。

キュー(待ち行列)持続:

デフォルトのキューは、これらのメッセージは一度だけ送信され、正常に一度使用されていることを確認永続的なモードです。これらのメッセージについては、信頼性がプライム考慮事項です。

もう一つの重要な側面は、消費者にそれらを送信する前にメッセージサービスがメッセージを失わない、ターゲットに永続的なメッセージの信頼性を確保することです。

テーマ(トピック)持続:
消費者コード:

package pres.zhang.persistent;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;
import java.io.IOException;

public class Topic_Consumer {
    public static final String ACTIVEMQ_URL = "tcp://localhost:61616";
    public static final String TOPIC_NAME = "topic_acton";

    public static void main(String[] args) throws JMSException, IOException {
        //1.创建连接工厂,按照给定的url地址,采用默认用户名和密码
        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
        //2.通过连接工厂,获得连接connection,并启动访问
        Connection connection = activeMQConnectionFactory.createConnection();
        //connection.start();

        //设置订阅用户
        connection.setClientID("test");

        //3.创建回话session
        //两个参数 1.事务  2.签收
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //4.创建目的地(具体是队列还是主题topic)
        Topic topic = session.createTopic(TOPIC_NAME);

        //创建持久化的订阅 参数:1.主题 2.备注
        TopicSubscriber topicSubscriber = session.createDurableSubscriber(topic, "remard");

        //发布订阅
        connection.start();
        Message message = topicSubscriber.receive();

        while (null != message){
            TextMessage textMessage = (TextMessage) message;
            System.out.println("收到的持久化topic:" + ((TextMessage) message).getText());
            //继续监听
            message = topicSubscriber.receive(1000L);
        }

        session.close();
        connection.close();
    }
}

生産者コード:

package pres.zhang.persistent;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

public class Topic_Produce {
    public static final String ACTIVEMQ_URL = "tcp://localhost:61616";
    public static final String TOPIC_NAME = "topic_acton";

    public static void main(String[] args) throws JMSException {
        //1.创建连接工厂,按照给定的url地址,采用默认用户名和密码
        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
        //2.通过连接工厂,获得连接connection,并启动访问
        Connection connection = activeMQConnectionFactory.createConnection();
        //connection.start();

        //3.创建回话session
        //两个参数 1.事务  2.签收
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //4.创建目的地(具体是队列还是主题topic)
        Topic topic = session.createTopic(TOPIC_NAME);
        //创建消息的生产者
        MessageProducer messageProducer = session.createProducer(topic);
        //通过使用messageProducer生产3条消息发送到MQ的队列里面

        //设置持久化主题
        messageProducer.setDeliveryMode(DeliveryMode.PERSISTENT);
        //因为设置持久化主题,所以connect.start()在这里调用
        connection.start();
        for (int i = 0; i < 3; i++) {
            //7.创建消息
            TextMessage textMessage = session.createTextMessage("TOPIC_NAME---" + i);//可以理解为字符串
            //8.通过messageProducer发送给MQ
            messageProducer.send(textMessage);
        }
        //9.关闭资源
        messageProducer.close();
        session.close();
        connection.close();;
        System.out.println("消息发布到TOPIC完成!");
    }
}

テスト:消費者側、テーマ別のサブスクリプションを実行します
ここに画像を挿入説明
ここに画像を挿入説明

個人消費へのメッセージがないので、ディスプレイは、アクティブな加入者を持っているので、プログラムは、リスニングとなっています。:私たちは、プログラムを終了し、変更内容は以下のようにしている
ここに画像を挿入説明
私たちのプログラムが終了しているため、オフラインフィールドに表示されるように、私たちが正常に加入しています。

今すぐニュースのプロデューサーを実行します。
ここに画像を挿入説明
ここに画像を挿入説明

メッセージが正常に送信しました。私たちは、消費者を再度実行します。
コンソールを印刷します:

收到的持久化topic:TOPIC_NAME---0
收到的持久化topic:TOPIC_NAME---1
收到的持久化topic:TOPIC_NAME---2

ここに画像を挿入説明
ここに画像を挿入説明

私たちがトピックにサブスクライブしているために成功し、メッセージを受信しました。

要約:

  1. まず、消費者を実行し、我々は、このトピックにサブスクライブするものに似MQ、に登録するために等しくなければなりません。
  2. メッセージプロデューサは、実行を送信します
  3. この時点で、かどうかに関係なく、消費者のオンライン、そして、オンラインでない、受信次回に接続します、私はメッセージがダウンして受信し、受信したことはありません。
公開された636元の記事 ウォンの賞賛1867 ビュー23万+

おすすめ

転載: blog.csdn.net/cold___play/article/details/104056112