ActionMQ5.8.0 JMS實例 手把手詳細圖解

ActionMQ 是開源的JMS實現

1.下載ActiveMQ

去官方網站下載:http://activemq.apache.org/

2.運行ActiveMQ

解壓縮apache-activemq-5.5.1-bin.zip,然後雙擊apache-activemq-5.8.0\bin\activemq.bat運行ActiveMQ程序。

啓動ActiveMQ以後,登陸:http://localhost:8161/admin/,創建一個Queue,命名爲FirstQueue。如下圖

目錄結構如下:


運行在網頁中,它會讓你登錄用戶方可進入,默認的用戶名和密碼是admin,




3 . 測試
ActiveMQ默認使用的TCP連接端口是61616,通過查看該端口的信息可以測試ActiveMQ是否成功啓動
window環境運行  netstat -an|find "61616"

Class源代碼中可以看到


4.創建Eclipse JAVA項目並運行

創建project:ActiveMQ-5.8,並導入apache-activemq-5.8.0\lib目錄下需要用到的jar文件,項目結構如下圖所示:


若找不到相應的包,使用以下連接下載也行 http://repo1.maven.org/maven2/org/apache/activemq/activemq-rar/

3.1.Sender.java

  1. package cn.jms;  
  2.   
  3. import javax.jms.Connection;  
  4. import javax.jms.ConnectionFactory;  
  5. import javax.jms.DeliveryMode;  
  6. import javax.jms.Destination;  
  7. import javax.jms.MessageProducer;  
  8. import javax.jms.Session;  
  9. import javax.jms.TextMessage;  
  10. import org.apache.activemq.ActiveMQConnection;  
  11. import org.apache.activemq.ActiveMQConnectionFactory;  
  12.   
  13. public class Sender {  
  14.     private static final int SEND_NUMBER = 5;  
  15.   
  16.     public static void main(String[] args) {  
  17.         // ConnectionFactory :連接工廠,JMS 用它創建連接  
  18.         ConnectionFactory connectionFactory;  
  19.         // Connection :JMS 客戶端到JMS Provider 的連接  
  20.         Connection connection = null;  
  21.         // Session: 一個發送或接收消息的線程  
  22.         Session session;  
  23.         // Destination :消息的目的地;消息發送給誰.  
  24.         Destination destination;  
  25.         // MessageProducer:消息發送者  
  26.         MessageProducer producer;  
  27.         // TextMessage message;  
  28.         // 構造ConnectionFactory實例對象,此處採用ActiveMq的實現jar  
  29.         connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616");  
  30.         try {  
  31.             // 構造從工廠得到連接對象  
  32.             connection = connectionFactory.createConnection();  
  33.             // 啓動  
  34.             connection.start();  
  35.             // 獲取操作連接  
  36.             session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);  
  37.             // 獲取session注意參數值xingbo.xu-queue是一個服務器的queue,須在在ActiveMq的console配置  
  38.             destination = session.createQueue("FirstQueue");  
  39.             // 得到消息生成者【發送者】  
  40.             producer = session.createProducer(destination);  
  41.             // 設置不持久化,此處學習,實際根據項目決定  
  42.             producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);  
  43.             // 構造消息,此處寫死,項目就是參數,或者方法獲取  
  44.             sendMessage(session, producer);  
  45.             session.commit();  
  46.         } catch (Exception e) {  
  47.             e.printStackTrace();  
  48.         } finally {  
  49.             try {  
  50.                 if (null != connection)  
  51.                     connection.close();  
  52.             } catch (Throwable ignore) {  
  53.             }  
  54.         }  
  55.     }  
  56.   
  57.     public static void sendMessage(Session session, MessageProducer producer)throws Exception {  
  58.         for (int i = 1; i <= SEND_NUMBER; i++) {  
  59.             TextMessage message = session.createTextMessage("ActiveMq 發送的消息" + i);  
  60.             // 發送消息到目的地方  
  61.             System.out.println("發送消息:" + "ActiveMq 發送的消息" + i);  
  62.             producer.send(message);  
  63.         }  
  64.     }  
  65. }  

3.2.Receiver.java

  1. package cn.jms;  
  2.   
  3. import javax.jms.Connection;  
  4. import javax.jms.ConnectionFactory;  
  5. import javax.jms.Destination;  
  6. import javax.jms.MessageConsumer;  
  7. import javax.jms.Session;  
  8. import javax.jms.TextMessage;  
  9. import org.apache.activemq.ActiveMQConnection;  
  10. import org.apache.activemq.ActiveMQConnectionFactory;  
  11.   
  12. public class Receiver {  
  13.     public static void main(String[] args) {  
  14.         // ConnectionFactory :連接工廠,JMS 用它創建連接  
  15.         ConnectionFactory connectionFactory;  
  16.         // Connection :JMS 客戶端到JMS Provider 的連接  
  17.         Connection connection = null;  
  18.         // Session: 一個發送或接收消息的線程  
  19.         Session session;  
  20.         // Destination :消息的目的地;消息發送給誰.  
  21.         Destination destination;  
  22.         // 消費者,消息接收者  
  23.         MessageConsumer consumer;  
  24.         connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616");  
  25.         try {  
  26.             // 構造從工廠得到連接對象  
  27.             connection = connectionFactory.createConnection();  
  28.             // 啓動  
  29.             connection.start();  
  30.             // 獲取操作連接  
  31.             session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);  
  32.             // 獲取session注意參數值xingbo.xu-queue是一個服務器的queue,須在在ActiveMq的console配置  
  33.             destination = session.createQueue("FirstQueue");  
  34.             consumer = session.createConsumer(destination);  
  35.             while (true) {  
  36.                 // 設置接收者接收消息的時間,爲了便於測試,這裏設定爲100s  
  37.                 TextMessage message = (TextMessage) consumer.receive(100000);  
  38.                 if (null != message) {  
  39.                     System.out.println("收到消息" + message.getText());  
  40.                 } else {  
  41.                     break;  
  42.                 }  
  43.             }  
  44.         } catch (Exception e) {  
  45.             e.printStackTrace();  
  46.         } finally {  
  47.             try {  
  48.                 if (null != connection)  
  49.                     connection.close();  
  50.             } catch (Throwable ignore) {  
  51.             }  
  52.         }  
  53.     }  
  54. }  

4.注意事項

先啓動apache-activemq-5.8.0\bin\activemq.bat運行ActiveMQ程序。在運行main方法,否則回報連接失敗的錯誤,如下

  1. SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.  
  2. javax.jms.JMSException: Could not connect to broker URL: tcp://localhost:61616. Reason: java.net.ConnectException: Connection refused: connect  
  3.     at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:35)  
  4.     at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:293)  
  5.     at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:238)  
  6.     at org.apache.activemq.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:184)  
  7.     at cn.jms.Sender.main(Sender.java:32)  
  8. Caused by: java.net.ConnectException: Connection refused: connect  
  9.     at java.net.PlainSocketImpl.socketConnect(Native Method)  
  10.     at java.net.PlainSocketImpl.doConnect(Unknown Source)  
  11.     at java.net.PlainSocketImpl.connectToAddress(Unknown Source)  
  12.     at java.net.PlainSocketImpl.connect(Unknown Source)  
  13.     at java.net.SocksSocketImpl.connect(Unknown Source)  
  14.     at java.net.Socket.connect(Unknown Source)  
  15.     at org.apache.activemq.transport.tcp.TcpTransport.connect(TcpTransport.java:496)  
  16.     at org.apache.activemq.transport.tcp.TcpTransport.doStart(TcpTransport.java:459)  
  17.     at org.apache.activemq.util.ServiceSupport.start(ServiceSupport.java:55)  
  18.     at org.apache.activemq.transport.AbstractInactivityMonitor.start(AbstractInactivityMonitor.java:140)  
  19.     at org.apache.activemq.transport.TransportFilter.start(TransportFilter.java:58)  
  20.     at org.apache.activemq.transport.WireFormatNegotiator.start(WireFormatNegotiator.java:72)  
  21.     at org.apache.activemq.transport.TransportFilter.start(TransportFilter.java:58)  
  22.     at org.apache.activemq.transport.TransportFilter.start(TransportFilter.java:58)  
  23.     at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:273)  
  24.     ... 3 more  

5.測試過程

1、先運行Sender,輸出以下信息,若先運行Receiver則無輸出

發送消息:ActiveMq 發送的消息1
發送消息:ActiveMq 發送的消息2
發送消息:ActiveMq 發送的消息3
發送消息:ActiveMq 發送的消息4
發送消息:ActiveMq 發送的消息5

2、運行Receiver

收到消息ActiveMq 發送的消息1
收到消息ActiveMq 發送的消息2
收到消息ActiveMq 發送的消息3
收到消息ActiveMq 發送的消息4
收到消息ActiveMq 發送的消息5

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