ActiveMQ監聽者接收信息


 1 import java.text.SimpleDateFormat;
 2 import java.util.Date;
 3 
 4 import javax.jms.Connection;
 5 import javax.jms.ConnectionFactory;
 6 import javax.jms.Destination;
 7 import javax.jms.JMSException;
 8 import javax.jms.Message;
 9 import javax.jms.MessageConsumer;
10 import javax.jms.MessageListener;
11 import javax.jms.Session;
12 import javax.jms.TextMessage;
13 
14 import org.apache.activemq.ActiveMQConnectionFactory;
15 
16 public class ActiveMQReceive {
17     //連接賬號
18     private String userName = "";
19     //連接密碼
20     private String password = "";
21     //連接地址
22     private String brokerURL = "tcp://192.168.18.161:61616";
23     //connection的工廠
24     private ConnectionFactory factory;
25     //連接對象
26     private Connection connection;
27     //一個操作會話
28     private Session session;
29     //目的地,其實就是連接到哪個隊列,如果是點對點,那么它的實現是Queue,如果是訂閱模式,那它的實現是Topic
30     private Destination destination;
31     //消費者,就是接收數據的對象
32     private MessageConsumer consumer;
33     
34     public static void main(String[] args) {
35         ActiveMQReceive receive = new ActiveMQReceive();
36         receive.start();
37     }
38     
39     public void start(){
40         try {
41             //根據用戶名,密碼,url創建一個連接工廠
42             factory = new ActiveMQConnectionFactory(userName, password, brokerURL);
43             //從工廠中獲取一個連接
44             connection = factory.createConnection();
45             //連接啟動
46             connection.start();
47             //創建一個session
48             //第一個參數:是否支持事務,如果為true,則會忽略第二個參數,被jms服務器設置為SESSION_TRANSACTED
49             //第二個參數為false時,paramB的值可為Session.AUTO_ACKNOWLEDGE,Session.CLIENT_ACKNOWLEDGE,DUPS_OK_ACKNOWLEDGE其中一個。
50             //Session.AUTO_ACKNOWLEDGE 為自動確認,客戶端發送和接收消息不需要做額外的工作。哪怕是接收端發生異常,也會被當作正常發送成功。
51             //Session.CLIENT_ACKNOWLEDGE 為客戶端確認。客戶端接收到消息后,必須調用javax.jms.Message的acknowledge方法。jms服務器才會當作發送成功,並刪除消息。
52             //DUPS_OK_ACKNOWLEDGE 允許副本的確認模式。一旦接收方應用程序的方法調用從處理消息處返回,會話對象就會確認消息的接收;而且允許重復確認。
53             session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
54             //創建一個到達的目的地,activemq不可能同時只能跑一個隊列吧,這里就是連接了一個名為"Alarm"的隊列,這個會話將會到這個隊列,當然,如果這個隊列不存在,將會被創建
55             destination = session.createTopic("Alarm");
56             //根據session,創建一個接收者對象
57             consumer = session.createConsumer(destination);
58             
59             
60             //實現一個消息的監聽器
61             //實現這個監聽器后,以后只要有消息,就會通過這個監聽器接收到
62             consumer.setMessageListener(new MessageListener() {
63                 @Override
64                 public void onMessage(Message message) {
65                     try {
66                         //獲取到接收的數據
67                         String text = ((TextMessage)message).getText();
68                         String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(new Date().getTime());
69                         System.out.println(time+":");
70                         System.out.println(text);
71                         System.out.println();
72                     } catch (JMSException e) {
73                         e.printStackTrace();
74                     }
75                 }
76             });
77             //關閉接收端,也不會終止程序哦
78 //            consumer.close();
79         } catch (JMSException e) {
80             e.printStackTrace();
81         }
82     }
83 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM