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)

消息队列:快速上手ActiveMQ消息队列的JMS方式使用(两种模式:Topic和Queue的消息推送和订阅)

JMS-ActiveMq-点对点模式

ActiveMQ实战-集群

ActiveMQ--模式(队列模式/主题模式)