activeMq有两种模式,说下个人理解
activemq 8186 管理端口 61616 默认服务端口
queue队列模式
topic 主题模式
队列模式: 生产者生成消息存入队列,消费者通过监听队列的queue消费者负责消费,且每个消息只能消费一次.
应用场景: 登陆成功,记录日志/记录状态/记录ip 等的一些列操作,可以异步执行,相对于来说不须要同步的操作,可以保证操作要求的请求不丢失
主题模式: 生产者生成消息,发布消息,订阅之后的消费者都可以读取到发布的消息,并且所有消息均可被多个消费者都消费一次
应用场景: 商城下单成功后,发送一条成功的消息,被日志系统/库存系统/物流系统 分别读取到,并做相应操作
springboot+activemq整合
1 引入pom依赖
2 分别编写 生产者 消费者 配置类
做一下说明,队列模式/主题模式,都是以配置类中的 关键字为判断对象,且两种模式不能共存
目录结构 监听1是监听复制过去的,为了测试
为了测试什么呢?
测试队列模式,是否两个消费者都消费,且均分
测试主题模式,是否消息产生后,两个消费者都消费一次
yml 配置:
spring:
jms:
# 默认情况下activemq提供的是queue模式,若要使用topic模式需要配置下面配置
pub-sub-domain:false
# activemq消息队列
activemq:
broker-url: tcp://172.18.3.180:61616
#是否是内存模式(内置MQ,true是 false否)
in-memory:false
# 等待消息发送响应的时间。设置为0等待永远
send-timeout: 0
user:'admin'
password:'admin'
packages:
#信任所有的包
trust-all:true
pool:
#是否替换默认的连接池,使用ActiveMQ的连接池需引入的依赖
enabled:false
pub-sub-domain:false 不启用主题模式,即队列模式,当为true时,为主题模式
现在是队列模式,编写测试类测试
运行queueTest,产生10次消息
一个监听/一个监听1 分别打印五次,共十次
改变配置 将yml中的配置 pub-sub-domain:false 变为pub-sub-domain:true,开启主题模式
执行topicTest方法,只产生一条消息
监听/监听1 分别消费一次,共消费两次
假如有10个监听者,那么主题模式下(topic),一个消息将被消费十次