MQ作用:http://blog.csdn.net/qq_32331997/article/details/77967319
1.首先需要去官网下载activeMQ:MQ官方下载地址
1.1 activemq.bat 我这里是64位系统,点击启动mq服务,启动后不能关闭窗口
1.2 InstallService.bat 安装 mq 服务,自己可以设置自动启动,然后下次开机就自动启动mq服务了
1.3 activeMQ 发送消息主要有两种 “主题模式”,“队列模式”
1.3.1区别:
主题模式:若我现在发送100条消息,打开两个监听器来接消息,则两个监听器都会接收到100条数据
队列模式:若我现在发送100条消息,打开两个监听器来接消息,则两个监听器平分数据,每个就收50条
1.4 创建一个maven项目
向 pom 文件导入包
<dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> <version>5.15.0</version> </dependency>
1.4 创建一个消息发送者:AppProducer (队列模式)
package com.spf.activemq.queue; import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*; /** 消息提供者 * Author : ShuPF */ public class AppProducer { public static final String URL = "tcp://192.168.1.125:61616"; public static final String queueName = "queue-test"; public static void main(String[] args) throws JMSException { //1.创建连接工厂 ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(URL); //2.创建连接 Connection connection = connectionFactory.createConnection(); //3.启动连接 connection.start(); //4.创建会话 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); // 5.创建一个目标 Destination destination = session.createQueue(queueName); //6.创建一个生产者 MessageProducer producer = session.createProducer(destination); for (int i = 0; i < 100; i++) { //7.创建消息 TextMessage textMessage = session.createTextMessage("test"+i); //8.发送 producer.send(textMessage); System.out.println("消息发送成功"+textMessage.getText()); } //9.关闭连接 connection.stop(); } }
1.5 消息接收者 AppCustomer
package com.spf.activemq.queue; import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*; /** * Author : ShuPF */ public class AppCustomer { public static final String URL = "tcp://192.168.1.125:61616"; public static final String queueName = "queue-test"; public static void main(String[] args) throws JMSException { //1.创建连接工厂 ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(URL); //2.创建连接 Connection connection = connectionFactory.createConnection(); //3.启动连接 connection.start(); //4.创建会话 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); // 5.创建一个目标 Destination destination = session.createQueue(queueName); //6.创建一个消费者 MessageConsumer consumer = session.createConsumer(destination); //7.创建一个监听器 consumer.setMessageListener(new MessageListener() { public void onMessage(Message message) { TextMessage textMessage = (TextMessage) message; try { System.out.println("接收消息成功"+textMessage.getText()); } catch (JMSException e) { e.printStackTrace(); } } }); //connection.stop(); } }1.6 运行main方法测试 我们把 AppCustomer 运行两次看看效果
如图我们可以看出在队列模式下,接收消息方把消息平分接收了
1.7 测试主题模式下的消息发送 两个类需要修改的地方如下
public static final String queueName = "queue-test";改为:
public static final String topicName = "topic-test";
Destination destination = session.createQueue(queueName);改为:
Destination destination = session.createTopic(topicName)
注意:主题模式需要先订阅消息才能接收到消息:所以需要先启动 AppCustomer 再启动 AppProducer
如图:主题模式下我们可以看出,每个消息的订阅者都会把所有消息都接收一遍