java 消息机制 ActiveMQ入门实例
詳見:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt180
1.下載ActiveMQ?
去官方網站下載:http://activemq.apache.org/?
我下載的時候是 ActiveMQ 5.8.0 Release版?
2.運行ActiveMQ?
解壓縮apache-activemq-5.8.0-bin.zip,然后雙擊apache-activemq-5.5.1\bin\activemq.bat運行ActiveMQ程序。?
啟動ActiveMQ以后,登陸:http://localhost:8161/admin/,創建一個Queue,命名為FirstQueue。?
3.創建Eclipse項目并運行?
創建java project:ActiveMQ-5.8,新建lib文件夾?
打開apache-activemq-5.8.0\lib目錄?
拷貝?
activemq-broker-5.8.0.jar?
activemq-client-5.8.0.jar?
geronimo-j2ee-management_1.1_spec-1.0.1.jar?
geronimo-jms_1.1_spec-1.1.1.jar?
slf4j-api-1.6.6.jar?
這5個jar文件到lib文件夾中,并Build Path->Add to Build Path?
結構如圖:?
?
Sender.java?
Java代碼??
package?com.lm.activemq;??
??
/**?
?*?@Header:?Sender.java?
?*?類描述:?
?*?@author:?lm?
?*?@date?2013-7-17?上午10:52:42?
?*?@Email??
?*?@company?歡?
?*?@addr?北京市朝陽區勁松?
?*/??
import?javax.jms.Connection;??
import?javax.jms.ConnectionFactory;??
import?javax.jms.DeliveryMode;??
import?javax.jms.Destination;??
import?javax.jms.MessageProducer;??
import?javax.jms.Session;??
import?javax.jms.TextMessage;??
import?org.apache.activemq.ActiveMQConnection;??
import?org.apache.activemq.ActiveMQConnectionFactory;??
??
public?class?Sender?{??
????private?static?final?int?SEND_NUMBER?=?5;??
??
????public?static?void?main(String[]?args)?{??
????????//?ConnectionFactory?:連接工廠,JMS?用它創建連接??
????????ConnectionFactory?connectionFactory;?//?Connection?:JMS?客戶端到JMS??
????????//?Provider?的連接??
????????Connection?connection?=?null;?//?Session:?一個發送或接收消息的線程??
????????Session?session;?//?Destination?:消息的目的地;消息發送給誰.??
????????Destination?destination;?//?MessageProducer:消息發送者??
????????MessageProducer?producer;?//?TextMessage?message;??
????????//?構造ConnectionFactory實例對象,此處采用ActiveMq的實現jar??
????????connectionFactory?=?new?ActiveMQConnectionFactory(??
????????????????ActiveMQConnection.DEFAULT_USER,??
????????????????ActiveMQConnection.DEFAULT_PASSWORD,?"tcp://localhost:61616");??
????????try?{?//?構造從工廠得到連接對象??
????????????connection?=?connectionFactory.createConnection();??
????????????//?啟動??
????????????connection.start();??
????????????//?獲取操作連接??
????????????session?=?connection.createSession(Boolean.TRUE,??
????????????????????Session.AUTO_ACKNOWLEDGE);??
????????????//?獲取session注意參數值xingbo.xu-queue是一個服務器的queue,須在在ActiveMq的console配置??
????????????destination?=?session.createQueue("FirstQueue");??
????????????//?得到消息生成者【發送者】??
????????????producer?=?session.createProducer(destination);??
????????????//?設置不持久化,此處學習,實際根據項目決定??
????????????producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);??
????????????//?構造消息,此處寫死,項目就是參數,或者方法獲取??
????????????sendMessage(session,?producer);??
????????????session.commit();??
????????}?catch?(Exception?e)?{??
????????????e.printStackTrace();??
????????}?finally?{??
????????????try?{??
????????????????if?(null?!=?connection)??
????????????????????connection.close();??
????????????}?catch?(Throwable?ignore)?{??
????????????}??
????????}??
????}??
??
????public?static?void?sendMessage(Session?session,?MessageProducer?producer)??
????????????throws?Exception?{??
????????for?(int?i?=?1;?i?<=?SEND_NUMBER;?i++)?{??
????????????TextMessage?message?=?session.createTextMessage("ActiveMq?發送的消息"??
????????????????????+?i);??
????????????//?發送消息到目的地方??
??
????????????System.out.println("發送消息:"?+?"ActiveMq?發送的消息"?+?i);??
????????????producer.send(message);??
????????}??
????}??
}??
Receiver.java?
Java代碼??
package?com.lm.activemq;??
??
/**?
?*?@Header:?Receiver.java?
?*?類描述:?
?*?@author:?lm?
?*?@date?2013-7-17?上午10:52:58?
?*?@Email??
?*?@company?歡?
?*?@addr?北京市朝陽區勁松?
?*/??
import?javax.jms.Connection;??
import?javax.jms.ConnectionFactory;??
import?javax.jms.Destination;??
import?javax.jms.MessageConsumer;??
import?javax.jms.Session;??
import?javax.jms.TextMessage;??
import?org.apache.activemq.ActiveMQConnection;??
import?org.apache.activemq.ActiveMQConnectionFactory;??
??
public?class?Receiver?{??
????public?static?void?main(String[]?args)?{??
????????//?ConnectionFactory?:連接工廠,JMS?用它創建連接??
????????ConnectionFactory?connectionFactory;??
????????//?Connection?:JMS?客戶端到JMS?Provider?的連接??
????????Connection?connection?=?null;??
????????//?Session:?一個發送或接收消息的線程??
????????Session?session;??
????????//?Destination?:消息的目的地;消息發送給誰.??
????????Destination?destination;??
????????//?消費者,消息接收者??
????????MessageConsumer?consumer;??
????????connectionFactory?=?new?ActiveMQConnectionFactory(??
????????????????ActiveMQConnection.DEFAULT_USER,??
????????????????ActiveMQConnection.DEFAULT_PASSWORD,?"tcp://localhost:61616");??
????????try?{??
????????????//?構造從工廠得到連接對象??
????????????connection?=?connectionFactory.createConnection();??
????????????//?啟動??
????????????connection.start();??
????????????//?獲取操作連接??
????????????session?=?connection.createSession(Boolean.FALSE,??
????????????????????Session.AUTO_ACKNOWLEDGE);??
????????????//?獲取session注意參數值xingbo.xu-queue是一個服務器的queue,須在在ActiveMq的console配置??
????????????destination?=?session.createQueue("FirstQueue");??
????????????consumer?=?session.createConsumer(destination);??
????????????while?(true)?{??
????????????????//?設置接收者接收消息的時間,為了便于測試,這里誰定為100s??
????????????????TextMessage?message?=?(TextMessage)?consumer.receive(100000);??
????????????????if?(null?!=?message)?{??
????????????????????System.out.println("收到消息"?+?message.getText());??
????????????????}?else?{??
????????????????????break;??
????????????????}??
????????????}??
????????}?catch?(Exception?e)?{??
????????????e.printStackTrace();??
????????}?finally?{??
????????????try?{??
????????????????if?(null?!=?connection)??
????????????????????connection.close();??
????????????}?catch?(Throwable?ignore)?{??
????????????}??
????????}??
????}??
}??
5.測試過程?
先運行:Receiver.java?
再運行:Sender.java?
可以看到結果?
Sender運行后:?
發送消息:ActiveMq 發送的消息1?
發送消息:ActiveMq 發送的消息2?
發送消息:ActiveMq 發送的消息3?
發送消息:ActiveMq 發送的消息4?
發送消息:ActiveMq 發送的消息5?
Receiver運行后:?
收到消息ActiveMq 發送的消息1?
收到消息ActiveMq 發送的消息2?
收到消息ActiveMq 發送的消息3?
收到消息ActiveMq 發送的消息4?
收到消息ActiveMq 發送的消息5?
要想看到不同的輸出內容,通過點擊如下圖的按鈕切換console?
?
在Receiver.java中,可以設置一個時間,比如receive(500000),如下代碼所示:?
Java代碼??
TextMessage?message?=?(TextMessage)?consumer.receive(500000);??
這個時候運行Receiver.java的話,會使得這個Receiver.java一直運行500秒,在eclipse中可以發現:?
點擊那個紅色方塊可以手動停止運行程序?
?
轉載于:https://www.cnblogs.com/grefr/p/6094979.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的java 消息机制 ActiveMQ入门实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu中设置静态IP和DNS
- 下一篇: [UVa1213]Sum of Diff