本篇主要介紹PUB/SUB模式
PUB/SUB模式區(qū)別于P2P模式,PUB/SUB模式下一個(gè)消息可以被多個(gè)消費(fèi)者消息。消息生產(chǎn)者需要指定一個(gè)主題,即Topic。所有訂閱該主題的消費(fèi)者都能消費(fèi)該生產(chǎn)者發(fā)送的消息。上代碼:
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = new ActiveMQTopic("LzyTopic");//此處創(chuàng)建一個(gè)主題
consumer1 = session.createConsumer(topic);//消費(fèi)者1
consumer1.setMessageListener(new MessageListener() {
? ? ? ? ? ? ? @Override
? ? ? ? ? ? ? ? public void onMessage(Message arg0) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?TextMessage tm = (TextMessage) arg0;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if (tm != null) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?System.out.println("consume1 and topic is"+ tm.getText());
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } catch (JMSException e) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?e.printStackTrace();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ? ? ? }});///消費(fèi)者1增加消息監(jiān)聽
consumer2 = session.createConsumer(topic);//消費(fèi)者2
consumer2.setMessageListener(new MessageListener() {
? ? ? ? ? ?@Override
? ? ? ? ? ? public void onMessage(Message arg0) {
? ? ? ? ? ? ? ? ? ? ? TextMessage tm = (TextMessage) arg0;
? ? ? ? ? ? ? ? ? ? ? if (tm != null) {
? ? ? ? ? ? ? ? ? ? ? ?try {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?System.out.println("consume2 and topic is"+ tm.getText());
? ? ? ? ? ? ? ? ? ? ? ? } catch (JMSException e) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?e.printStackTrace();
? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ?}});//消費(fèi)者2增加消息監(jiān)聽
創(chuàng)建了2個(gè)消費(fèi)者,都訂閱了名字為"LzyTopic"的topic。接下來(lái)的代碼在創(chuàng)建一個(gè)生產(chǎn)者,同樣也是指定topic。
producer = session.createProducer(topic);//和消費(fèi)者同樣的topic
for (int i = 0; i <5; i++) {
? ? ? TextMessage tm=session.createTextMessage("Message"+i);
? ? ? producer.send(tm);//發(fā)送消息
}
打印結(jié)果如下:
consume1 and topic isMessage0
consume2 and topic isMessage0
consume1 and topic isMessage1
consume2 and topic isMessage1
consume1 and topic isMessage2
consume2 and topic isMessage2
consume1 and topic isMessage3
consume2 and topic isMessage3