ActiveMQ-通过案例理解Queue与Topic

本文在基于下文的基础上做阐述:
ActiveMQ-通过javax.jms调用

ActiveMQ有两种消息模式:Queue与Topic
Queue:即点对点模式、队列模式
Topic:即订阅模式

环境

操作系统:Win10
IDE:Eclipse
JDK:1.8
ActiveMQ服务IP及端口:192.168.142.154:61616
ActiveMQ控制中心URL:http://192.168.142.154:8161/
jmsDemo:包含消息生产者和消息消费者的一个java工程
在这里插入图片描述

队列模式(Queue)
消息生产者不需要知道接收方的状态
  • 消息生产者产生消息的时候,消息消费者处于接收状态

    先启动QueueConsumer
    在这里插入图片描述

    再启动QueueProducer
    在这里插入图片描述
    此时,这种情况下消息已被成功接收

  • 消息生产者产生消息的时候,消息消费者处于关闭状态 ,之后才处于接收状态
    先启动QueueProducer
    在这里插入图片描述

    Number Of Pending Message就是待处理的消息,可以看出此时生产者产生的一个消息被存放在了ActiveMQ服务器上。消费方的数量还是0。

    再启动QueueConsumer
    在这里插入图片描述
    可看出,此时已经有了一个消费者,待处理的消息变为了0,已经处理的消息变成了1。即之前那个待处理的消息已经被消费方接收到了。

消息可以有多个接收方,同一个消息只能被接收一次
  1. 启动3个消息消费者
    启动3次QueueConsumer
    在这里插入图片描述

  2. 启动2个消息生产者(即产生两个消息)
    启动2次QueueConsumer
    在这里插入图片描述
    两个消息均被成功接收

  3. 通过查看消息消费者的日志,能发现消息被不同的(随机的)消费者接收到了,并且,只有两个接收到消息的日志。即一个消息只能被接收到一次

订阅模式(Topic)
消息只有在接收方正在接收时,才能被成功接收
  • 消息生产者产生消息的时候,消息消费者处于接收状态
  1. 先启动TopicConsumer
    在这里插入图片描述

  2. 再启动TopicProducer
    4
    消息已被成功接收

  • 消息生产者产生消息的时候,消息消费者处于关闭状态 ,之后才处于接收状态
  1. 先启动TopicProducer
    在这里插入图片描述
    即有一个消息处于消息队列中,但还没被接收

  2. 再启动TopicConsumer
    在这里插入图片描述
    新增了一个消费方,但可以看到,之前的那个消息的处理状态并没有改变,还是没有被接收。

  3. 再次启动TopicProducer(即再发布一个消息)
    在这里插入图片描述
    可以看到,消息队列里有2个消息,但只有一个消息被成功接收。因为发布第二个消费的时候,消费方已经是接收状态了,所以只有第二个消息被成功接收。

消息可以有多个接收方,同一个消息会被每个消费者接收
  1. 启动3个消息消费者
    启动3次TopicConsumer
    在这里插入图片描述

  2. 启动2个消息生产者(即产生两个消息)
    启动2次TopicProducer
    在这里插入图片描述
    可看到,进入队列的有2个消息,接收到了6个消息,即3个消费方都接收到了2个消息。通过查看消息消费者的日志,能发现确实每个消费者都接收到了2个消息

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值