从零开始···AMQ主题模式实现

本文介绍了如何实现主题模式的消息传递,并对比了与队列模式的区别。通过具体的代码示例,展示了发布者如何将消息发送到主题上,以及多个消费者如何订阅同一主题并接收消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一章实现了点对点的消息模式,接下来试着实现一下主题模式。
两者代码大致相同,但却让我纠结了好久才成功。
首先要理解一下主题模式的概念:
同样是发布者和消费者,这里发布者将消息发布到一个主题下,这时,订阅了这个主题的消费者就能接收到发布的消息。
简单来说,就像是订阅杂志,从你订阅杂志开始,你就能收到接下来出的杂志,但你肯定收不到之前已经发布的杂志。
这是与队列不同的地方,队列类似把消息放到一个地方,等着消费者过来取,取走了就没了,只有一份;主题是把消息复制发送给所有订阅了的消费者,只发送一次,所以后订阅的收不到这个消息。
以上是我的理解,有错误的地方请指正,谢谢。
接下来就是代码:
发布者的代码基本相同,唯一改变的地方是建立地址:
代码
这里用的是createTopic方法,因为使用的是主题模式。
然后需要一个监听器,相当于帮助消费者订阅主题的:

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

public class MyMessageListener implements MessageListener {

    @Override
    public void onMessage(Message message) {
        try {
            System.out.println("topic message" + ((TextMessage) message).getText());
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
}

然后就是消费者的代码,同样修改不是很大:
代码
这里修改了两个地方,一个是创建地址改为创建主题。另一个是将接收消息的操作交给监听器执行。
代码写好以后,先运行消费者类,然后运行发布者类。
在控制台可以看到输出:
结果
我这里用了三个线程进行测试,可以看到三个消费者都分别拿到了消息数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值