生活随笔
收集整理的這篇文章主要介紹了
                                
ActiveMQ_基础学习
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
 
                                
                            
                            
                            最近偶然接觸到了JMS,故學習一下
 
 1、下載&文檔&視頻
 無疑官網是最好的選擇(如果你英語可以的話),上面有最全的國外大牛的視頻和博客講解。http://activemq.apache.org/
 首先通過http://www.apache.org/dyn/closer.cgi?path=/activemq/5.10.0/apache-activemq-5.10.0-bin.zip下載壓縮包(最新版本5.10.0)
 
 2、ActiveMQ優點
 1.多種語言和協議編寫客戶端。語言:?Java, C, C++, C#, Ruby, Perl,?Python,?PHP。應用協議: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
 2.完全支持JMS1.1和J2EE 1.4規范 (持久化,XA消息,事務)
 3.對spring的支持,ActiveMQ可以很容易內嵌到使用Spring的系統里面去,而且也支持Spring2.0的特性
 4.完全支持JMS1.1和J2EE 1.4規范 (持久化,XA消息,事務)
 5.通過了常見J2EE服務器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的測試,其中通過JCA 1.5 resource adaptors的配置,可以讓ActiveMQ可以自動的部署到任何兼容J2EE 1.4 商業服務器上
 6.支持多種傳送協議:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
 7.從設計上保證了高性能的集群,客戶端-服務器,點對點
 8.支持Ajax
 9.支持與Axis的整合
 10.可以很容易得調用內嵌JMS provider,進行測試
 
 3、啟動服務
 把下載好的壓縮包解壓至任意磁盤,打開目錄。如下:
 
 
 打開bin中的win64文件夾(我的是win7 64位系統)執行activemq.bat
 
 
 
 啟動后在瀏覽器中輸入http://localhost:8161/admin/會出現提示框要求輸入用戶名和密碼
 輸入admin - admin即可進入
 這些都是默認配置,都可以在conf文件夾中進行配置。我們先用默認的進行測試就行了
 
 
 下面的這個Queues你們是沒有東西的,我這個my-queue是我之前用來測試的隊列,沒有刪除。
 
 4、編寫測試代碼
 首先往項目中導入下載的文件夾中的jar包?activemq-all-5.10.0.jar
 (1)ProducerTool類
     [html]?view plaincopy  print?
   package?com.activemq.producer;????import?javax.jms.Connection;??import?javax.jms.DeliveryMode;??import?javax.jms.Destination;??import?javax.jms.JMSException;??import?javax.jms.MessageProducer;??import?javax.jms.Session;??import?javax.jms.TextMessage;????import?org.apache.activemq.ActiveMQConnection;??import?org.apache.activemq.ActiveMQConnectionFactory;????public?class?ProducerTool?{????????????private?String?user?=?ActiveMQConnection.DEFAULT_USER?;????????????private?String?password?=?ActiveMQConnection.DEFAULT_PASSWORD?;????????????private?String?url?=?ActiveMQConnection.DEFAULT_BROKER_URL?;????????????private?String?subject?=?"benjamin"?;????????????private?Destination?destination?=?null?;????????????private?Connection?connection?=?null?;????????????private?Session?session?=?null?;????????????private?MessageProducer?producer?=?null?;????????????//初始化??????private?void?initialize()?throws?Exception?{??????????ActiveMQConnectionFactory?connectionFactory?=?new?ActiveMQConnectionFactory(user,?password,?url)?;??????????connection?=?connectionFactory.createConnection()?;??????????session?=?connection.createSession(false,?Session.AUTO_ACKNOWLEDGE)?;??????????destination?=?session.createQueue(subject)?;??????????producer?=?session.createProducer(destination)?;??????????producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT)?;??????}????????????//發送消息??????public?void?produceMessage(String?message)?throws?Exception?{??????????initialize()?;??????????TextMessage?msg?=?session.createTextMessage(message)?;??????????connection.start()?;??????????System.out.println("Producer:->Sending?message:?"?+?message);??????????producer.send(msg)?;??????????System.out.println("Producer:->Message?sent?complete!");??????}????????????//關閉連接??????public?void?close()?throws?JMSException?{??????????System.out.println("Producer:->Closing?Connection");??????????if(producer?!=?null)?{??????????????producer.close()?;??????????}??????????if(session?!=?null)?{??????????????session.close()?;??????????}??????????if(connection?!=?null)?{??????????????connection.close()?;??????????}??????}??}??  (2)ConsumerTool類
     [html]?view plaincopy  print?
   package?com.activemq.consumer;????import?javax.jms.Connection;??import?javax.jms.Destination;??import?javax.jms.JMSException;??import?javax.jms.Message;??import?javax.jms.MessageConsumer;??import?javax.jms.MessageListener;??import?javax.jms.Session;??import?javax.jms.TextMessage;????import?org.apache.activemq.ActiveMQConnection;??import?org.apache.activemq.ActiveMQConnectionFactory;????public?class?ConsumerTool?implements?MessageListener{????????private?String?user?=?ActiveMQConnection.DEFAULT_USER?;????????????private?String?password?=?ActiveMQConnection.DEFAULT_PASSWORD?;????????????private?String?url?=?ActiveMQConnection.DEFAULT_BROKER_URL?;????????????private?String?subject?=?"benjamin"?;????????????private?Destination?destination?=?null?;????????????private?Connection?connection?=?null?;????????????private?Session?session?=?null?;????????????private?MessageConsumer?consumer?=?null?;????????????//初始化??????public?void?initialize()?throws?JMSException?{??????????//連接工廠是用戶創建連接的對象,這里使用的是ActiveMQ的ActiveMQConnectionFactory根據url,username和password創建連接工廠。???????????ActiveMQConnectionFactory?connectionFactory?=?new?ActiveMQConnectionFactory(user,?password,?url)?;??????????//連接工廠創建一個jms?connection????????????connection?=?connectionFactory.createConnection()?;??????????//是生產和消費的一個單線程上下文。會話用于創建消息的生產者,消費者和消息。會話提供了一個事務性的上下文。????????????session?=?connection.createSession(false,?Session.AUTO_ACKNOWLEDGE)?;??????????//目的地是客戶用來指定他生產消息的目標還有他消費消息的來源的對象,兩種消息傳遞方式:點對點和發布/訂閱????????????destination?=?session.createQueue(subject)?;??????????//會話創建消息的生產者將消息發送到目的地????????????consumer?=?session.createConsumer(destination)?;??????}????????????//消費消息??????public?void?consumeMessage()?throws?JMSException?{??????????initialize()?;??????????connection.start()?;????????????????????System.out.println("Consumer:->Begin?listening...");??????????//開始監聽??????????//如果不想監聽,想去主動的接受消息,只需要改為receive()即可??????????consumer.setMessageListener(this)?;??????????//?Message?message?=?consumer.receive();???????}????????????//關閉連接??????public?void?close()?throws?JMSException?{??????????System.out.println("consumer:->Closing?Connection");??????????if(consumer?!=?null)?{??????????????consumer.close()?;??????????}??????????if(session?!=?null)?{??????????????session.close()?;??????????}??????????if(connection?!=?null)?{??????????????connection.close()?;??????????}??????}????????????//消息處理函數??????@Override??????public?void?onMessage(Message?message)?{??????????try?{??????????????if(message?instanceof?TextMessage)?{??????????????????TextMessage?txtMsg?=?(TextMessage)?message?;??????????????????String?msg?=?txtMsg.getText()?;??????????????????System.out.println("Consumer:->Received:?"?+?msg);??????????????}else?{??????????????????System.out.println("Consumer:->Received:?"?+?message);??????????????}??????????}?catch?(JMSException?e)?{??????????????e.printStackTrace();??????????}??????}??}??  (3)測試TestJMS類
     [html]?view plaincopy  print?
   package?com.activemq.testjms;????import?javax.jms.JMSException;????import?org.apache.activemq.ActiveMQConnection;????import?com.activemq.consumer.ConsumerTool;??import?com.activemq.producer.ProducerTool;????public?class?TestJMS?{??????public?static?void?main(String[]?args)?throws?JMSException,?Exception?{??????????ConsumerTool?ct?=?new?ConsumerTool()?;??????????ProducerTool?pt?=?new?ProducerTool()?;??????????System.out.println(ActiveMQConnection.DEFAULT_BROKER_URL?+?"-------------");??????????//開始監聽??????????ct.consumeMessage()?;????????????????????//延遲500毫秒后發送消息??????????Thread.sleep(500)?;??????????pt.produceMessage("Hello?World!")?;??????????pt.close()?;????????????????????//延遲500毫秒后停止接收信息??????????Thread.sleep(500)?;??????????ct.close()?;??????}??}?? 輸出臺會輸出:  
 
 因為我們在程序中創建了名為“Benjamin”的隊列,所以我們打開剛才的管理ActiveMQ的頁面,可以看到Queue下面多了個隊列。
 
                            總結
                            
                                以上是生活随笔為你收集整理的ActiveMQ_基础学习的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                            
                                如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。