本篇主要介紹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)聽(tīng)
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)聽(tīng)
創(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