2020-07-28 activeMq 两种模式的测试
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2020-07-28 activeMq 两种模式的测试相关的知识,希望对你有一定的参考价值。
参考技术A activeMq有两种模式,说下个人理解activemq 8186 管理端口 61616 默认服务端口
queue队列模式
topic 主题模式
队列模式: 生产者生成消息存入队列,消费者通过监听队列的queue消费者负责消费,且每个消息只能消费一次.
应用场景: 登陆成功,记录日志/记录状态/记录ip 等的一些列操作,可以异步执行,相对于来说不须要同步的操作,可以保证操作要求的请求不丢失
主题模式: 生产者生成消息,发布消息,订阅之后的消费者都可以读取到发布的消息,并且所有消息均可被多个消费者都消费一次
应用场景: 商城下单成功后,发送一条成功的消息,被日志系统/库存系统/物流系统 分别读取到,并做相应操作
springboot+activemq整合
1 引入pom依赖
<groupId>org.springframework.boot
<artifactId>spring-boot-starter-activemq
<version>1.5.20.RELEASE
<groupId>org.messaginghub
<artifactId>pooled-jms
<version>1.0.4
</dependency>
2 分别编写 生产者 消费者 配置类
@Component
public class ActiveSend
@Autowired
private Queuequeue;
@Autowired
private Topictopic;
@Autowired
private JmsMessagingTemplatejmsMessagingTemplate;
public void sendQueue()throws JMSException
ObjectMessage objectMessage =new ActiveMQObjectMessage();
objectMessage.setObject("nihao");
jmsMessagingTemplate.convertAndSend(queue,objectMessage);
public void sendTopic()throws JMSException
ObjectMessage objectMessage =new ActiveMQObjectMessage();
objectMessage.setObject("nihao");
jmsMessagingTemplate.convertAndSend(topic,objectMessage);
@Component
public class ActiveListenner
@JmsListener(destination ="active-queue")
public void reciveQueueMsg(ObjectMessage message)throws JMSException
System.out.println("收到的消息"+message.getObject().toString());
@JmsListener(destination ="active-topic")
public void reciveTopicMsg(ObjectMessage message)throws JMSException
System.out.println("主题收到的消息"+message.getObject().toString());
@Configuration
public class ActiveMqConfig
@Bean
public Queuequeue ()
return new ActiveMQQueue("active-queue");
@Bean
public Topictopic ()
return new ActiveMQTopic("active-topic");
做一下说明,队列模式/主题模式,都是以配置类中的 关键字为判断对象,且两种模式不能共存
为了测试什么呢?
测试队列模式,是否两个消费者都消费,且均分
测试主题模式,是否消息产生后,两个消费者都消费一次
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
现在是队列模式,编写测试类测试
改变配置 将yml中的配置 pub-sub-domain:false 变为pub-sub-domain:true,开启主题模式
假如有10个监听者,那么主题模式下(topic),一个消息将被消费十次
以上是关于2020-07-28 activeMq 两种模式的测试的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot整合ActiveMq实现Queue和Topic两种模式(图文)
[进阶之路]ActiveMQ实现消息失败重发机制和两种模式(PTP和PubSub)