1.创建maven工程,在pom.xml导入日志包和ActiveMQ包
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.activemq/activemq-core -->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-core</artifactId>
<version>5.5.1</version>
</dependency>
注:可前往http://mvnrepository.com获取对应版本的maven相关包
2.消息生产者
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
public class ActiveProducer {
private static final String url = "tcp://localhost:61616";
private static final String topicName = "topic-test";
public static void main(String[] args) throws JMSException {
//连接工厂
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
//获取连接对象
Connection connection = connectionFactory.createConnection();
//开启连接
connection.start();
//创建session会话
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//创建主题目的地
Destination destination = session.createTopic(topicName);
//创建生产者
MessageProducer producer = session.createProducer(destination);
for(Integer i=0;i<100;i++){
//创建需要发送消息
TextMessage message = session.createTextMessage("我是主题生产者:这是第"+i+"条消息");
//发送消息
producer.send(message);
System.out.println("主题生产者成功发送第第"+i+"条消息");
}
}
}
3.消息消费者
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
public class ActiveComsumer {
private static final String url = "tcp://localhost:61616";
private static final String topicName = "topic-test";
public static void main(String[] args) throws JMSException{
//连接工厂
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
//创建连接
Connection connection = connectionFactory.createConnection();
//开启连接
connection.start();
//创建session会话
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//创建主题目的地
Destination destination = session.createTopic(topicName);
//创建消费者
MessageConsumer consumer = session.createConsumer(destination);
//设置监听消息服务
consumer.setMessageListener(new MessageListener() {
public void onMessage(Message messageContent) {
TextMessage message = (TextMessage)messageContent;
try {
//接收到的消息
System.out.println("主题元素的消费者,接收到的消息:"+message.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
}
}
4.运行
1. 先运行ActiveMQ服务【http://localhost:8161/admin】=>运行运行1个消费者 =>后消息生产者 {必须先运行消费者进行监听}
未有消息消费:
消费消息:
2. 先运行ActiveMQ服务【http://localhost:8161/admin】=>运行运行3个消费者 =>后消息生产者 {必须先运行消费者进行监听}
未有消息消费:
消费消息:
查看消费者监听服务控制台:
消费者A、消费者B、消费者C 都打印:
总结:
ActiveMQ主题(topic)模式,每个消费者都可以全部消费生产者的每条信息,生产者生产100条信息,3个消费者就会有300条信息被消费。