下載
官方網站下載:http://activemq.apache.org/
1.3.2安裝(Linux)
(1) 將apache-activemq-5.12.0-bin.tar.gz 上傳至服務器
(2) 解壓此文件
tar zxvf apache-activemq-5.12.0-bin.tar.gz |
(3) 為apache-activemq-5.12.0目錄賦權
chmod 777 apache-activemq-5.12.0 |
(4) 進入apache-activemq-5.12.0\bin目錄
(5)賦與執行權限
chmod 755 activemq ------------------ 知識點小貼士 ---------------- linux 命令chmod 755的意思 chmod是Linux下設置文件權限的命令,后面的數字表示不同用戶或用戶組的權限。 一般是三個數字: 權限分為三種:讀(r=4),寫(w=2),執行(x=1) 。 綜合起來還有可讀可執行(rx=5=4+1)、可讀可寫(rw=6=4+2)、可讀可寫可執行(rwx=7=4+2+1)。 所以,chmod 755 設置用戶的權限為: 1.文件所有者可讀可寫可執行 --7 2.與文件所有者同屬一個用戶組的其他用戶可讀可執行 --5 |
1.3.3啟動
./activemq start |
出現下列提示表示成功!
假設服務器地址為192.168.25.135 ,打開瀏覽器輸入地址
http://192.168.25.135:8161/ 即可進入ActiveMQ管理頁面
點擊進入管理頁面
輸入用戶名和密碼 均為 admin
進入主界面
點對點消息列表:
列表各列信息含義如下:
Number Of Pending Messages :等待消費的消息 這個是當前未出隊列的數量。
Number Of Consumers :消費者 這個是消費者端的消費者數量
Messages Enqueued :進入隊列的消息 進入隊列的總數量,包括出隊列的。
Messages Dequeued :出了隊列的消息 可以理解為是消費這消費掉的數量。
2. JMS入門小Demo
2.1點對點模式
點對點的模式主要建立在一個隊列上面,當連接一個列隊的時候,發送端不需要知道接收端是否正在接收,可以直接向ActiveMQ發送消息,發送的消息,將會先進入隊列中,如果有接收端在監聽,則會發向接收端,如果沒有接收端接收,則會保存在activemq服務器,直到接收端接收消息,點對點的消息模式可以有多個發送端,多個接收端,但是一條消息,只會被一個接收端給接收到,哪個接收端先連上ActiveMQ,則會先接收到,而后來的接收端則接收不到那條消息。
2.1.1消息生產者
(1)創建工程jmsDemo ,引入依賴
<dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-client</artifactId> <version>5.13.4</version> </dependency> |
(2)創建類QueueProducer main方法代碼如下:
//1.創建連接工廠 ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://192.168.25.135:61616"); //2.獲取連接 Connection connection = connectionFactory.createConnection(); //3.啟動連接 connection.start(); //4.獲取session (參數1:是否啟動事務,參數2:消息確認模式) Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); //5.創建隊列對象 Queue queue = session.createQueue("test-queue"); //6.創建消息生產者 MessageProducer producer = session.createProducer(queue); //7.創建消息 TextMessage textMessage = session.createTextMessage("歡迎來到神奇的品優購世界"); //8.發送消息 producer.send(textMessage); //9.關閉資源 producer.close(); session.close(); connection.close(); |
上述代碼中第4步創建session 的兩個參數:
第1個參數 是否使用事務
第2個參數 消息的確認模式
· AUTO_ACKNOWLEDGE = 1 自動確認
· CLIENT_ACKNOWLEDGE = 2 客戶端手動確認
· DUPS_OK_ACKNOWLEDGE = 3 自動批量確認
· SESSION_TRANSACTED = 0 事務提交並確認
運行后通過ActiveMQ管理界面查詢
2.1.2消息消費者
創建類QueueConsumer ,main方法代碼如下:
//1.創建連接工廠 ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://192.168.25.135:61616"); //2.獲取連接 Connection connection = connectionFactory.createConnection(); //3.啟動連接 connection.start(); //4.獲取session (參數1:是否啟動事務,參數2:消息確認模式) Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); //5.創建隊列對象 Queue queue = session.createQueue("test-queue"); //6.創建消息消費 MessageConsumer consumer = session.createConsumer(queue);
//7.監聽消息 consumer.setMessageListener(new MessageListener() { public void onMessage(Message message) { TextMessage textMessage=(TextMessage)message; try { System.out.println("接收到消息:"+textMessage.getText()); } catch (JMSException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); //8.等待鍵盤輸入 System.in.read(); //9.關閉資源 consumer.close(); session.close(); connection.close(); |
執行后看到控制台輸出
2.1.3運行測試
同時開啟2個以上的消費者,再次運行生產者,觀察每個消費者控制台的輸出,會發現只有一個消費者會接收到消息。
2.2 發布/訂閱模式
2.2.1消息生產者
創建類TopicProducer ,main方法代碼如下:
//1.創建連接工廠 ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://192.168.25.135:61616"); //2.獲取連接 Connection connection = connectionFactory.createConnection(); //3.啟動連接 connection.start(); //4.獲取session (參數1:是否啟動事務,參數2:消息確認模式) Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); //5.創建主題對象 Topic topic = session.createTopic("test-topic"); //6.創建消息生產者 MessageProducer producer = session.createProducer(topic); //7.創建消息 TextMessage textMessage = session.createTextMessage("歡迎來到神奇的品優購世界"); //8.發送消息 producer.send(textMessage); //9.關閉資源 producer.close(); session.close(); connection.close(); |
運行效果如下:
2.2.2消息消費者
創建類TopicConsumer ,main方法代碼如下:
//1.創建連接工廠 ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://192.168.25.135:61616"); //2.獲取連接 Connection connection = connectionFactory.createConnection(); //3.啟動連接 connection.start(); //4.獲取session (參數1:是否啟動事務,參數2:消息確認模式) Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); //5.創建主題對象 //Queue queue = session.createQueue("test-queue"); Topic topic = session.createTopic("test-topic"); //6.創建消息消費 MessageConsumer consumer = session.createConsumer(topic);
//7.監聽消息 consumer.setMessageListener(new MessageListener() { public void onMessage(Message message) { TextMessage textMessage=(TextMessage)message; try { System.out.println("接收到消息:"+textMessage.getText()); } catch (JMSException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); //8.等待鍵盤輸入 System.in.read(); //9.關閉資源 consumer.close(); session.close(); connection.close(); |
2.2.3運行測試
同時開啟2個以上的消費者,再次運行生產者,觀察每個消費者控制台的輸出,會發現每個消費者會接收到消息。
完畢!留個贊再走唄 (* ̄︶ ̄) !