ActiveMQ 部署及發送接收消息

ActiveMQ 部署及發送接收消息

一、           下載

下載地址:http://activemq.apache.org/ 我這裏使用的版本爲當前最新5.8.0。

下載版本有Windows和Linux兩個版本,且都分爲32位和64位。根據自己需要選擇下載。

二、           安裝

我這裏下載的爲windows的32位版本(apache-activemq-5.8.0-bin.zip),下載後直接解壓到需要安裝的目錄或在直接解壓到當前目錄也可,解壓完安裝也完成。


解壓後目錄如上圖,裏面包含了示例和文檔,及所有的jar包。

 

三、           運行

進入到bin目錄(apache-activemq-5.8.0\bin),雙擊activemq.bat,就會運行,運行截圖如下:



此時表示ActiveMQ已經在運行了,當然正常生產環境下可以設置作爲服務在後臺運行,並且隨系統啓動而啓動。

四、           測試

ActiveMQ自帶了一套管理系統,訪問http://localhost:8161/admin/,會出現需要輸入用戶名和密碼的頁面如下:



默認用戶名和密碼都是admin,進入後則爲主界面:



在這個界面上,我們可以管理隊列及其他的一些功能,爲了下面的繼續,我們在這裏創建一個Queue和一個Topic。



點擊目錄上的Queues進入創建Queue頁面,輸入Queue名稱,點擊Create後下面就創建了G2Queue的queue隊列。




這裏也可以不用這樣手工創建,在發送端指定了一個Queue或Topic名字後,會自動創建一個隊列,如上面的choice.queue和FirstQueue都是我測試程序時,程序裏面指定的Queue名稱,自動創建的。

同樣的方式創建一個Topic,如下:



五、           發送消息

創建一個新的項目,我這裏是創建的webproject名稱爲ActiveMQ,引入ActiveMQ的jar包,整個工程結構如下:


 

此段代碼從網上直接copy,只是稍作修改:

[java] view plaincopy

  1. import java.util.Random;  

  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.JMSException;  

  8. import javax.jms.MessageProducer;  

  9. import javax.jms.Session;  

  10. import javax.jms.TextMessage;  

  11.    

  12. import org.apache.activemq.ActiveMQConnectionFactory;  

  13.    

  14. public class SendMessage {  

  15.     private static final String url = "tcp://localhost:61616";  

  16.     private static final String QUEUE_NAME = "G2Queue";  

  17.    

  18.     public void sendMessage() throwsJMSException {  

  19.        // JMS 客戶端到JMSProvider 的連接  

  20.        Connection connection = null;  

  21.        try {  

  22.            // 連接工廠,JMS 用它創建連接  

  23.            // 構造ConnectionFactory實例對象,此處採用ActiveMq的實現jar  

  24.            ConnectionFactory connectionFactory = newActiveMQConnectionFactory(url);  

  25.            connection = (Connection)connectionFactory.createConnection();  

  26.            // 啓動連接  

  27.            connection.start();  

  28.            //Session:發送或接收消息的線程  

  29.            // 獲取session  

  30.            Session session = (Session) connection.createSession(false,  

  31.                   Session.AUTO_ACKNOWLEDGE);  

  32.            // 消息的目的地,消息發送到那個隊列  

  33.            Destination destination = session.createQueue(QUEUE_NAME);  

  34.            //MessageProducer:消息發送者(生產者)  

  35.            // 創建消息發送者  

  36.            MessageProducer producer =session.createProducer(destination);  

  37.            // 設置是否持久化  

  38.            //DeliveryMode.NON_PERSISTENT:不持久化  

  39.            //DeliveryMode.PERSISTENT:持久化  

  40.            producer.setDeliveryMode(DeliveryMode.PERSISTENT);  

  41.             

  42.            String msg = "";  

  43.            int i = 0;  

  44.         do {  

  45.             msg = "第"+i + "次發送的消息:"+new Random();  

  46.                 TextMessagemessage = session.createTextMessage(msg);  

  47.                 Thread.sleep(1000);  

  48.                 // 發送消息到目的地方  

  49.                producer.send(message);  

  50.                 System.out.println("發送消息:" +msg);  

  51.                 i++;  

  52.         } while (i<1000);  

  53.        } catch (Exception e) {  

  54.            e.printStackTrace();  

  55.        }  

  56.     }  

  57.    

  58.     public static void main(String[] args) {  

  59.        SendMessage sndMsg = newSendMessage();  

  60.        try {  

  61.            sndMsg.sendMessage();  

  62.        } catch (Exception ex) {  

  63.            System.out.println(ex.toString());  

  64.        }  

  65.     }  

  66. }  




運行結果如下:

六、           接收消息


[java] view plaincopy

  1. package cn.g2room.mq.test;  

  2.    

  3. import javax.jms.Connection;  

  4. import javax.jms.ConnectionFactory;  

  5. import javax.jms.Destination;  

  6. import javax.jms.JMSException;  

  7. import javax.jms.Message;  

  8. import javax.jms.MessageConsumer;  

  9. import javax.jms.Session;  

  10. import javax.jms.TextMessage;  

  11.    

  12. import org.apache.activemq.ActiveMQConnectionFactory;  

  13.    

  14. /** 

  15.  * 消息接收類 

  16.  * 

  17.  * @createTime:Apr 7, 2013 5:11:11 PM 

  18.  * @author:<a href="mailto:[email protected]">迷蝶</a> 

  19.  * @version:0.1 

  20.  *@lastVersion: 0.1 

  21.  * @updateTime: 

  22.  *@updateAuthor: <a href="mailto:[email protected]">迷蝶</a> 

  23.  * @changesSum: 

  24.  * 

  25.  */  

  26. public class ReceiveMessage {  

  27.          privatestatic final String url = "tcp://localhost:61616";  

  28.          privatestatic final String QUEUE_NAME = "G2Queue";  

  29.    

  30.          publicvoid receiveMessage() {  

  31.                    Connectionconnection = null;  

  32.                    try{  

  33.                             try{  

  34.                                      ConnectionFactoryconnectionFactory = new ActiveMQConnectionFactory(  

  35.                                                         url);  

  36.                                      connection= connectionFactory.createConnection();  

  37.                             }catch (Exception e) {  

  38.                                      System.out.println(e.toString());  

  39.                             }  

  40.                             connection.start();  

  41.                             Sessionsession = connection.createSession(false,  

  42.                                                Session.AUTO_ACKNOWLEDGE);  

  43.                             Destinationdestination = session.createQueue(QUEUE_NAME);  

  44.                             //消息接收者,也就是消費者  

  45.                             MessageConsumerconsumer = session.createConsumer(destination);  

  46.                              

  47.                             consumeMessagesAndClose(connection,session, consumer);  

  48.                    }catch (Exception e) {  

  49.                             System.out.println(e.toString());  

  50.                    }  

  51.          }  

  52.          /** 

  53.           * 接收和關閉消息,如遇到消息內容爲close則,關閉連接 

  54.           * 

  55.           * @param connection   JMS 客戶端到JMSProvider 的連接 

  56.           * @param session                   發送或接收消息的線程 

  57.           * @param consumer              消息接收對象 

  58.           * @throws JMSException 

  59.           * @auther <ahref="mailto:[email protected]">迷蝶</a> 

  60.           * Apr 8, 2013 10:31:55 AM 

  61.           */  

  62.          protectedvoid consumeMessagesAndClose(Connection connection,  

  63.                             Sessionsession, MessageConsumer consumer) throws JMSException {  

  64.                    do{  

  65.                             Messagemessage = consumer.receive(1000);  

  66.                             if("close".equals(message)){  

  67.                                      consumer.close();  

  68.                                      session.close();  

  69.                                      connection.close();  

  70.                             }  

  71.                             if(message != null) {  

  72.                                      onMessage(message);  

  73.                             }  

  74.                    }while (true);  

  75.                     

  76.          }  

  77.    

  78.          publicvoid onMessage(Message message) {  

  79.                    try{  

  80.                             if(message instanceof TextMessage) {  

  81.                                      TextMessagetxtMsg = (TextMessage) message;  

  82.                                      Stringmsg = txtMsg.getText();  

  83.                                      System.out.println("Received:" + msg);  

  84.                             }  

  85.                    }catch (Exception e) {  

  86.                             e.printStackTrace();  

  87.                    }  

  88.    

  89.          }  

  90.    

  91.          publicstatic void main(String args[]) {  

  92.                    ReceiveMessagerm = new ReceiveMessage();  

  93.                    rm.receiveMessage();  

  94.          }  

  95. }  




運行結果如下:


 


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