ActiveMQ学习笔记(二):点对点方式学习
介绍
点对点的消息发送方式主要建立在消息(Message),队列(Queue),发送者(Sender),消费者(Receiver)上,Queue存储消息,Sender发送消息,Receiver接收消息,具体流程是Sender Client通过Queue发送message,Receiver Client从Queue中接收消息。消息的发送客户端和消息接收客户端没有时间上的依赖,可以异步进行
通过jms编码接口之间的关系
- ConnectionFactory创建连接Connection
- Connection创建会话Session
- 通过Session创建其它的(MessageProducer、MessageConsumer、Destination、TextMessage)
- 将生产者和消费者指向Destination
- 生产者向目标发送TextMessage消息send()
- 消费者设置监听器,监听消息
![jms]()
创建项目
新建maven项目

创建文件目录,先删除之前的src目录

创建完成

创建生产者
package org.emample.jms;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
/**
* @author: lxk
* @date: 2021/8/1 10:03
* @description: 生产者
* @modified By:
*/
public class producer {
// ActiveMQ的服务器tcp连接方式
private static final String url = "tcp://127.0.0.1:61616";
// 定义队列的名称
private static final String queueName = "queue-test";
public static void main(String[] args) throws JMSException {
// 1.创建connectionFactory
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
// 2.创建connection
Connection connection = connectionFactory.createConnection();
// 3.启动连接
connection.start();
// 4.创建session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 5.创建destination
Destination destination = session.createQueue(queueName);
// 6.创建生产者
MessageProducer producer = session.createProducer(destination);
for (int i=0; i<100; i++){
TextMessage textMessage = session.createTextMessage("发送文本" + i);
producer.send(textMessage);
if ((i+1)%10 == 0) {
System.out.println("已发送" + (i+1)/10 + "组");
}
}
// 7.关闭连接
connection.close();
}
}
创建消费者
package org.emample.jms;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
/**
* @author: lxk
* @date: 2021/8/1 10:05
* @description: 消费者
* @modified By:
*/
public class consumer {
// ActiveMQ的服务器tcp连接方式
private static final String url = "tcp://127.0.0.1:61616";
// 定义队列的名称
private static final String queueName = "queue-test";
public static void main(String[] args) throws JMSException {
// 1.创建connectionFactory
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
// 2.创建connection
Connection connection = connectionFactory.createConnection();
// 3.启动连接
connection.start();
// 4.创建session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 5.创建destination
Destination destination = session.createQueue(queueName);
// 6.创建消费者
MessageConsumer consumer = session.createConsumer(destination);
// 7.创建监听器
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
TextMessage textMessage = (TextMessage) message;
try {
System.out.println("收到消息" + textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
// 8.关闭连接(监听器是异步的还没有监听到消息的时候,就关闭连接了)
// connection.close();
}
}
启动
注: 启动时会有一个slf4j的报错信息

在pom文件中添加下图内容就可以解决,具体原因参考大佬的文章:https://blog.csdn.net/weixin_39548940/article/details/100015174
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.7.2</version>
</dependency>
生产者发送信息

然后启动消费者

测试两个消费者
启动方式:
- 选择消费者
- 点击 Edit Configurations...
![点击]()
3.勾选 Allow parallel run 按钮
![勾选]()
测试
先启动两个消费者

然后启动生产者

观察消费者消息接收情况


可以看到两个消费者收到的消息并不重复




浙公网安备 33010602011771号