ActiveMQのの紹介と使用

メッセージングミドルウェアのI.概要

メッセージミドルウェアとは何ですか

发送者将消息发送给消息服务器,消息服务器将消感存放在若千队列中,在合适的时候再将消息转发给接收者。
这种模式下,发送和接收是异步的,发送者无需等待; 二者的生命周期未必相同: 发送消息的时候接收者不一定运行,接收消息的时候发送者也不一定运行;一对多通信: 对于一个消息可以有多个接收者。

二、JMSの紹介

2.1 JMSとは何ですか?

JMS是java的消息服务,JMS的客户端之间可以通过JMS服务进行异步的消息传输。

2.2メッセージモデル

  • P2P(ポイントツーポイント):
    1.P2P略図

    特性の概念に関連する前記
    1メッセージ待ち行列(キュー)
    2.送信者(送信者)
    3.受信機(受信機)
    各メッセージが送信される4特定のキューは、受信側はキューからメッセージを取得します。それは彼らが消費またはタイムアウトするまで、メッセージキューを保持します。
    特長:
    1.各メッセージには一つだけのコンシューマ(消費者)(すなわち、消費者と、それはメッセージキュー内のメッセージはもはやありません)があり
    、送信側と受信機2の間の時間には依存性が、それは時に伝送言うことですメッセージが送信された後、受信者が何のランニングを持っていないかどうか、それは、メッセージがキューに送信された影響はありません
    。3.受信者の受信成功の成功後にメッセージキューに返信する必要があります
  • パブ/サブ(パブリッシュおよびサブスクライブ)
    パブ/サブモードマップ

どの概念と機能が含ま
1.テーマ(トピック)
2.出版(出版社)
3.加入者(加入者)
のトピックにメッセージを送信するクライアントを。より多くの出版社がトピックにメッセージを送信すると、システムは、複数の加入者にこれらのメッセージをお届けします。
パブ/サブ特性
1.各メッセージには、複数の消費者が持つことができる
2つのパブリッシャとサブスクライバ間の時間に依存しています。テーマ(トピック)の加入者のためにした後、それが消費者に、出版社のメッセージを加入者を作成しなければならない、とのメッセージを消費するために、加入者は、実行中の状態を維持しなければなりません。

  • 消費者の双方向のメッセージ
  1. 同期
    サブスクリプションまたは受信者は、メッセージを受信したメッセージを受信することができます(またはタイムアウトが前に)ブロックされたままになる前に、メソッドを受信する受信メソッドを呼び出します。
    2.非同期
    の加入者または受信者がメッセージリスナとして登録することができます。メッセージが到着すると、システムが自動的にonMessageメソッドリスナーを呼び出します。

シナリオ:

ユーザ登録、受注在庫を修正し、ログ保存

ActiveMQのは、使用されています

窓のActiveMQインストールの下で

現在のActiveMQを抽出すると、

binディレクトリにある64ビットシステムで起動入力する

ページに成功した訪問を開始するには:

ActiveMQのは、ピア(P2P)通信モードを使用して完了する

ファイルの依存関係の導入ポンポン

  <dependencies>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-core</artifactId>
            <version>5.7.0</version>
        </dependency>
    </dependencies>

プロデューサーコード

    public static void main(String[] args) throws JMSException {
        //连接工厂JMS 用它创建连接
        ConnectionFactory collectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
                ActiveMQConnection.DEFAULT_PASSWORD, "tcp://127.0.0.1:61616");
        
        Connection createConnection = collectionFactory.createConnection();
        createConnection.start();
        
        // Session: 一个发送或接收消息的线程
        Session session = createConnection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
        // Destination :消息的目的地;消息发送给谁.
        // 获取session注意参数值xiaobai是Query的名字

        Destination destination = session.createQueue("xiaobai");
        //MessageProducer:消息生产者
        MessageProducer producer = session.createProducer(destination);
        
        //设置持久化
        producer.setDeliveryMode(DeliveryMode.PERSISTENT);
        for (int i = 0; i < 5; i++) {
            System.out.println("我是生产者" + i);
            sendMsg(session, producer, "我是生产者" + i);
            session.commit();
        }
        
        System.out.println("我是生产者发送完毕" );
    }

    public static void sendMsg(Session session, MessageProducer producer, String i) throws JMSException {
        TextMessage textMessage = session.createTextMessage("hello activemq" + i);
        producer.send(textMessage);

    }

コンシューマーコード:

    //连接工厂,JMS 用它创建连接
        ConnectionFactory collectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
                ActiveMQConnection.DEFAULT_PASSWORD, "tcp://127.0.0.1:61616");
        
        Connection createConnection = collectionFactory.createConnection();
        createConnection.start();
        //Session: 一个发送或接收消息的线程
        Session session = createConnection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
        Destination destination = session.createQueue("xiaobai");
        MessageConsumer createConsumer = session.createConsumer(destination);
        while (true) {
            TextMessage textMessage = (TextMessage) createConsumer.receive();
            if (textMessage != null) {
                String text = textMessage.getText();
                System.out.println(text);
//              textMessage.acknowledge();
                session.commit();
            } else {
                break;
            }
            System.out.println("消费者消费完毕");
        }

プロデューサーは、メッセージデータの途中で見始めた

消費量を表示するには、消費者を開始します

パブリッシュおよびサブスクライブ

メーカーコード:

        ConnectionFactory collectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
                ActiveMQConnection.DEFAULT_PASSWORD, "tcp://127.0.0.1:61616");
        Connection createConnection = collectionFactory.createConnection();
        createConnection.start();

        Session session = createConnection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
        MessageProducer producer = session.createProducer(null);

        producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
        for (int i = 0; i < 5; i++) {
            System.out.println("我是生产者" + i);
            sendMsg(session, producer, "我是生产者" + i);
        }
        
        System.out.println("我是生产者发送完毕" );
    }

    public static void sendMsg(Session session, MessageProducer producer, String i) throws JMSException {
        TextMessage textMessage = session.createTextMessage("hello activemq" + i);
        Destination destination = session.createTopic("xiao_topic");
        producer.send(destination,textMessage);

    }

消費者コード

        ConnectionFactory collectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
                ActiveMQConnection.DEFAULT_PASSWORD, "tcp://127.0.0.1:61616");
        Connection createConnection = collectionFactory.createConnection();
        createConnection.start();

        Session session = createConnection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
        Destination destination = session.createTopic("xiao_topic");
        MessageConsumer createConsumer = session.createConsumer(destination);
        while (true) {
            TextMessage textMessage = (TextMessage) createConsumer.receive();
            if (textMessage != null) {
                String text = textMessage.getText();
                System.out.println(text);
            } else {
                break;
            }
            System.out.println("消费者消费完毕");
        }
        
    }

消費者は、最初に生産を開始した後、起動します

おすすめ

転載: www.cnblogs.com/Libbo/p/11546816.html