回顾
发布订阅模式
发布者发送到topic的消息,只有订阅了topic的订阅者才会收到消息。topic实现了发布和订阅,当你发布一个消息,所有订阅这个topic的服务都能得到这个消息,所以从1到N个订阅者都能得到这个消息的拷贝。
简单例子
session.createTopic("hello");
消费者
package com.example.topic;
import javax.jms.*;
import org.apache.activemq.ActiveMQConnectionFactory;
@SuppressWarnings("all")
public class ConsumerDemo {
public void reciveMessage() {
ConnectionFactory factory = null;
Connection connection = null;
Destination destination = null;
Session session = null;
MessageConsumer consumer = null;
Message message = null;
try {
factory = new ActiveMQConnectionFactory("admin", "admin", "tcp://127.0.0.1:61616");
connection = factory.createConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
destination = session.createTopic("hello");
consumer = session.createConsumer(destination);
while (true){
// 设置接受消息的时间为1分钟
message = consumer.receive(60000);
if (null != message){
String str = ((TextMessage) message).getText();
System.out.println(str);
}else {
break;
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (consumer!=null){consumer.close();}
if (session!=null){session.close();}
if (connection!=null){connection.close();}
} catch (JMSException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
ConsumerDemo demo = new ConsumerDemo();
demo.reciveMessage();
}
}
生产者
package com.example.topic;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
@SuppressWarnings("all")
public class ProducerDemo {
public void sendMessage(String msg) {
ActiveMQConnectionFactory factory = null;
Connection connection = null;
Destination destination = null;
Session session = null;
MessageProducer producer = null;
Message message = null;
try {
factory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");
connection = factory.createConnection();
connection.start();
session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
destination = session.createTopic("hello");
producer = session.createProducer(destination);
message = session.createTextMessage(msg);
producer.send(message);
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if (producer!=null){producer.close();}
if (session!=null){session.close();}
if (connection!=null){connection.close();}
} catch (JMSException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
ProducerDemo demo = new ProducerDemo();
demo.sendMessage("测试");
}
}
测试
先跑几个消费者实例
再跑一个生产者的实例
都接收到了消息…
(代码里设置的接收消息的时间为60秒)