JMS|消息中間件(二)簡單操作

JMS 入門小 Demo

點對點模式
  點對點的模式主要建立在一個隊列上面,當連接一個列隊的時候,發送端不需要知道接
收端是否正在接收,可以直接向 ActiveMQ 發送消息,發送的消息,將會先進入隊列中,如
果有接收端在監聽,則會發向接收端,如果沒有接收端接收,則會保存在 activemq 服務器,
直到接收端接收消息,點對點的消息模式可以有多個發送端,多個接收端,但是一條消息,
只會被一個接收端給接收到,哪個接收端先連上 ActiveMQ,則會先接收到,而後來的接收
端則接收不到那條消息。

1.引入依賴

<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-client</artifactId>
    <version>5.13.4</version>
</dependency>

2.消息生產者

     // 1.1創建鏈接工廠對象
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.132:61616");
        // 1.2創建連接

        Connection connection = connectionFactory.createConnection();
        // 1.3開啓連接
        connection.start();
        // 2.1獲取 session (參數 1:是否啓動事務,參數 2:消息確認模式)
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

        // 2.2創建主題對象、訂閱
        Topic topic = session.createTopic("my_topic");
        //2.2創建隊列對象
        //Queue queue = session.createQueue("my_queue");

        // 2.3創建息生產者
        MessageProducer producer = session.createProducer(topic);
        //2.3創建消息生產者
        //MessageProducer producer = session.createProducer(queue); 


        // 2.4創建消息
        TextMessage textMessage = session.createTextMessage("歡迎訂閱平郵購");
        // 3發送消息
        producer.send(textMessage);
        // 4關閉資源
        producer.close();
        session.close();
        connection.close();

上述代碼創建 session 的兩個參數:
第 1 個參數 是否使用事務
第 2 個參數 消息的確認模式:

- AUTO_ACKNOWLEDGE = 1 自動確認
- CLIENT_ACKNOWLEDGE = 2 客戶端手動確認
- DUPS_OK_ACKNOWLEDGE = 3 自動批量確認
- SESSION_TRANSACTED = 0 事務提交併確認

3.消息的消費者

// 1.1創建連接工廠
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.132:61616");
        // 1.2創建連接
        Connection connection = connectionFactory.createConnection();
        // 1.3開啓連接
        connection.start();
        // 2.1創建會話
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // 2.2創建隊列
        Topic topic = session.createTopic("my_topic");
        //2.2創建隊列
        //Queue queue = session.createQueue("my_queue");


        // 2.3創建消息的消費者
        MessageConsumer consumer = session.createConsumer(topic);
        //2.3創建消息的消費者
        //MessageConsumer consumer = session.createConsumer(queue);


        // 3設置監聽消息
        consumer.setMessageListener(new MessageListener() {
            // 消息監聽器的方法
            @Override
            public void onMessage(Message message) {
                try {
                    TextMessage textMessage = (TextMessage)message;
                    System.out.println(textMessage.getText());
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        });


        // 等待錄入
        System.in.read();

        // 4關閉資源
        consumer.close();
        session.close();
        connection.close();

  同時開啓 2 個以上的消費者,再次運行生產者,觀察每個消費者控制檯的輸出,會發現
每個消費者會接收到消息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章