ActiveMQ點對點模式(PTP)

一、創建Maven測試項目





二、pom.xml

    <dependencies>
        <!-- 消息隊列 -->
        <dependency>
            <groupId>org.apache.activemq</groupId>
                <artifactId>activemq-all</artifactId>
            <version>5.11.3</version>
        </dependency>
        
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.9</version>
        </dependency>
    </dependencies>

三、生產者(消息發送者)

第一步:創建ConnectionFactory對象,需要指定服務端ip及端口號。

第二步:使用ConnectionFactory對象創建一個Connection對象。

第三步:開啓連接,調用Connection對象的start方法。

第四步:使用Connection對象創建一個Session對象。

第五步:使用Session對象創建一個Destination對象(topicqueue),此處創建一個Queue對象

第六步:使用Session對象創建一個Producer對象。

第七步:創建一個Message對象,創建一個TextMessage對象。

第八步:使用Producer對象發送消息。

第九步:關閉資源。

四、消費者(消息接收者)

消費者:接收消息。

第一步:創建一個ConnectionFactory對象。

第二步:從ConnectionFactory對象中獲得一個Connection對象。

第三步:開啓連接。調用Connection對象的start方法。

第四步:使用Connection對象創建一個Session對象。

第五步:使用Session對象創建一個Destination對象。和發送端保持一致queue,並且隊列的名稱一致

第六步:使用Session對象創建一個Consumer對象。

第七步:接收消息。

第八步:打印消息。

第九步:關閉資源


測試1:先運行生產者,在運行消費者消費消息

測試2:先測試消費者等待消息到來,再運行生產者生產消息

注意:消費者運行後會一直等待鍵盤輸入

package name.yaohuan.activemq;
public class QueueTest {
    @Test
    public void testProducer() throws Exception {
        // 第一步:創建ConnectionFactory對象,需要指定服務端ip及端口號。
        //brokerURL服務器的ip及端口號
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.100.53:61616");
        // 第二步:使用ConnectionFactory對象創建一個Connection對象。
        Connection connection = connectionFactory.createConnection();
        // 第三步:開啓連接,調用Connection對象的start方法。
        connection.start();
        // 第四步:使用Connection對象創建一個Session對象。
        //第一個參數:是否開啓事務。true:開啓事務,第二個參數忽略。
        //第二個參數:當第一個參數爲false時,纔有意義。消息的應答模式。1、自動應答2、手動應答。一般是自動應答。
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // 第五步:使用Session對象創建一個Destination對象(topic、queue),此處創建一個Queue對象。
        //參數:隊列的名稱。
        Queue queue = session.createQueue("test-queue");
        // 第六步:使用Session對象創建一個Producer對象。
        MessageProducer producer = session.createProducer(queue);
        // 第七步:創建一個Message對象,創建一個TextMessage對象。
        /*TextMessage message = new ActiveMQTextMessage();
        message.setText("hello activeMq,this is my first test.");*/
        TextMessage textMessage = session.createTextMessage("hello activeMq,this is my first test.");
        // 第八步:使用Producer對象發送消息。
        producer.send(textMessage);
        // 第九步:關閉資源。
        producer.close();
        session.close();
        connection.close();
    }
    
    @Test
    public void testConsumer() throws Exception {
        // 第一步:創建一個ConnectionFactory對象。
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.100.53:61616");
        // 第二步:從ConnectionFactory對象中獲得一個Connection對象。
        Connection connection = connectionFactory.createConnection();
        // 第三步:開啓連接。調用Connection對象的start方法。
        connection.start();
        // 第四步:使用Connection對象創建一個Session對象。
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // 第五步:使用Session對象創建一個Destination對象。和發送端保持一致queue,並且隊列的名稱一致。
        Queue queue = session.createQueue("test-queue");
        // 第六步:使用Session對象創建一個Consumer對象。
        MessageConsumer consumer = session.createConsumer(queue);
        // 第七步:接收消息。
        consumer.setMessageListener(new MessageListener() {
            
            @Override
            public void onMessage(Message message) {
                try {
                    TextMessage textMessage = (TextMessage) message;
                    //取消息的內容
                    String text = textMessage.getText();
                    // 第八步:打印消息。
                    System.out.println(text);
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        });
        //等待鍵盤輸入
        System.in.read();//這句話會讓消費者一直在線
        // 第九步:關閉資源
        consumer.close();
        session.close();
        connection.close();
    }
}

注意:
如果使用的是阿里雲服務器的話注意端口的問題,在安全組裏查看tcp的端口配置規則。
消息發佈後,點擊查看消息時,在activemq中默認會報告錯誤,如下
 
原因:
此版本的activemq不支持運行在jdk1.8上,可以切換成jdk1.7

解決方案:
配置內置的jetty服務使用jdk1.7啓動
在activemq的bin路徑下找到 env 文件
修改其中的配置,將
#JAVA_HOME=""
改爲
JAVA_HOME="/usr/local/jdk1.7.0_76/"

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