SpringBoot2.1.X 整合 ActiveMQ发布订阅消息队列(二)

一、订阅模式

     生产者产生一条消息message放入一个topic中,该topic已经三个消费者订阅了,那么被放入topic中的这条消息,就会同时被这三个消费者取走(当然他们必须都处于在线状态),并进行“消费”。其实就类似现实生活中的手机接收推送。

二、订阅模式的使用场景

     发布订阅模式下,当发布者消息量很大时,显然单个订阅者的处理能力是不足的。实际上现实场景中是多个订阅者节点组成一个订阅组负载均衡消费topic消息即分组订阅,这样订阅者很容易实现消费能力线性扩展。可以看成是一个topic下有多个Queue,每个Queue是点对点的方式,Queue之间是发布订阅方式。
 

三、实战操作

    1、需要加入配置文件,支持发布订阅模型,默认只支持点对点  

            #default point to point
            spring.jms.pub-sub-domain=true

     2、springboot启动类中添加

    @Bean  //交给spring来管理,注入哦!
    public Topic topic(){
        return new ActiveMQTopic("tv.topic");
    }

  3、接口

 //发布消息
    public void publish(String msg);

4、接口实现的类

  //=======发布订阅相关代码=========

    //注入指定订阅  (在启动类中有注入哦!)
    @Autowired
    private Topic topic;

    @Override
    public void publish(String msg) {
        jmsTemplate.convertAndSend(this.topic,msg);   //指定主题消息队列哦!!!
    }

5、消费者类


/**
 *消费者
 */
@Component
public class TopicSub {

    //实时监听器监听order.queue这个消息队列
    @JmsListener(destination = "tv.topic")
    public void receiveTopic1(String text){
        System.out.println("TopicSub 消费者1 收到的消息为:"+text);

    }

    @JmsListener(destination = "tv.topic")
    public void receiveTopic2(String text){
        System.out.println("TopicSub 消费者2 收到的消息为:"+text);

    }

    @JmsListener(destination = "tv.topic")
    public void receiveTopic3(String text){
        System.out.println("TopicSub 消费者3 收到的消息为:"+text);

    }
}

6、控制器类

 发布/订阅///
    @GetMapping("topic")
    public Object topic(String msg) {
        //调用方法
        service.publish(msg);

        return JsonData.buildSuccess();
    }

7、启动运行

 

请求处理完毕后,topic中的出队列数为3,入队列数为1,证明这条消息分别被3个消费者消费了: 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值