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

来源:互联网 发布:网络鬼故事之603房间 编辑:程序博客网 时间:2024/05/19 15:43

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

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