SpringBoot整合activeMQ的简单案例
ActiveMQ是什么
ActiveMQ是消息队列技术,为解决高并发问题而生
ActiveMQ生产者消费者模型(生产者和消费者可以跨平台、跨系统)
ActiveMQ支持如下两种消息传输方式
点对点模式,生产者生产了一个消息,只能由一个消费者进行消费
发布/订阅模式,生产者生产了一个消息,可以由多个消费者进行消费
SpringBoot的简单整合
1. ActiveMQ下载启动
http://activemq.apache.org/download-archives.html ,本文用的是windows版的5.15.3版本,下载下来是压缩包,自行解压一个到目录下,CMD进入到解压目录下的bin目录下,执行 activemq.bat start 启动。如果能成功访问http://localhost:8161/admin(用户名和密码默认为admin),则启动成功。
2.添加依赖
创建两个springboot项目,分别作为消息提供者(provider)和消费者(consumer),添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<!--消息队列连接池-->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
<version>5.15.0</version>
</dependency>
3. boot_mq_product
启动类加入 @EnableJms
application.yml
server:
port: 7777
spring:
application:
name: boot_mq_product
activemq:
broker-url: tcp://127.0.0.1:61616 #MQ服务器地址
user: admin
password: admin
jms:
pub-sub-domain: true #false = queue true = topic
# 自己定义队列名称(P2P)
myqueue: boot-activemq-queue
# 发布/订阅模式的名称
mytopic: boot-activemq-topic
Queue_Produce
@RestController
public class Queue_Produce {
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
@Value("${myqueue}")
private String myQueue;
@PostMapping("send")
public void produceMsg(){
jmsMessagingTemplate.convertAndSend(myQueue,"我是一条消息");
System.out.println("消息推送到MQ成功");
}
@PostMapping("send1")
public void produceMsg1(){
User user = new User(1,"张三","123456");
String s = JSON.toJSONString(user);
jmsMessagingTemplate.convertAndSend(myQueue,s);
System.out.println("User推送到MQ成功");
}
}
Topic_Produce
@RestController
public class Topic_Produce {
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
@Value("${mytopic}")
private String mytopic;
@PostMapping("sendTopic")
public void sendTopic() {
String msg="发送Topic消息内容 :"+"我是一条订阅消息";
jmsMessagingTemplate.convertAndSend(mytopic, msg);
System.out.println("订阅消息发送成功");
}
}
boot_mq_consumer
application.yml
server:
port: 7778 # 端口号
spring:
application:
name: boot_mq_consumer
activemq:
broker-url: tcp://127.0.0.1:61616 # 自己的MQ服务器地址,用自己的
jms:
pub-sub-domain: true # false = Queue true = Topic
# 自己定义的队列名称(P2P)
myqueue: boot-activemq-queue
# 发布/订阅模式的名称
mytopic: boot-activemq-topic
Queue_Consumer
@Component
public class Queue_Consumer {
/**
* 使用JmsListener配置消费者监听的队列,其中name是接收到的消息
* @param
* @return
*/
@JmsListener(destination = "${myqueue}")
public void handleMessage(String message) {
System.out.println("成功接受name: " + message);
}
}
Topic_Consumer
@Component
public class Topic_Consumer {
/**
* 使用JmsListener配置消费者监听的队列,其中name是接收到的消息
* @param
* @return
*/
@JmsListener(destination = "${mytopic}")
public void handleMessage1(String message) {
System.out.println("消费者1成功接受: " + message);
}
/**
* 使用JmsListener配置消费者监听的队列,其中name是接收到的消息
* @param
* @return
*/
@JmsListener(destination = "${mytopic}")
public void handleMessage2(String message) {
System.out.println("消费者2成功接受: " + message);
}
}
注意:
使用订阅/发布方式时,需修改配置文件中的 pub-sub-domain 参数 (activeMQ默认使用P2P方式)
同时使用点对点和发布/订阅模式
1.修改配置文件
中的 pub-sub-domain参数为true
2.consumer的启动类
@Bean
public JmsListenerContainerFactory<?> jmsListenerContainerTopic(@Qualifier("jmsConnectionFactory") ConnectionFactory activeMQConnectionFactory) {
DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
bean.setPubSubDomain(true);
bean.setConnectionFactory(activeMQConnectionFactory);
return bean;
}
3.修改Topic_Consumer
@Component
public class Topic_Consumer {
/**
* 使用JmsListener配置消费者监听的队列,其中name是接收到的消息
* @param
* @return
*/
@JmsListener(destination = "${mytopic}", containerFactory = "jmsListenerContainerTopic")
public void handleMessage1(String message) {
System.out.println("消费者1成功接受: " + message);
}
/**
* 使用JmsListener配置消费者监听的队列,其中name是接收到的消息
* @param
* @return
*/
@JmsListener(destination = "${mytopic}", containerFactory = "jmsListenerContainerTopic")
public void handleMessage2(String message) {
System.out.println("消费者2成功接受: " + message);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)