日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ActiveMQ_基础学习

發布時間:2023/12/31 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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_基础学习的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。