学习ActiveMQ(三):发布/订阅模式(topic)演示
1.在这个项目中新增两个java类,主题生产者和主题消费者:
2.和点对点的代码差别并不大,所以将消费者和生产者的分别代码拷入新增的java类中,再修改就好了。
- appProducerTopic代码:标红字体是做出了修改,由创建队列改为了创建主题。
- package com.liu.jms;
- import org.apache.activemq.ActiveMQConnectionFactory;
- import javax.jms.*;
- public class appProducerTopic {
- private static final String url = "tcp://127.0.0.1:61616";//actvemq的服务器tcp连接方式
- private static final String topicName = "topic-test";//定义主题的名称
- public static void main(String[] args) throws JMSException {
- //1.创建connectionFactory
- ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
- //2.创建connection
- Connection connection = connectionFactory.createConnection();
- //3.启动连接
- connection.start();
- //4.创建session
- Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
- //5.创建destination
- Destination destination = session.createTopic(topicName);
- //6.创建生产者
- MessageProducer producer = session.createProducer(destination);
- for (int i = 0; i < 100; i++) {
- TextMessage textMessage = session.createTextMessage("test" + i);
- //7.发送消息
- producer.send(textMessage);
- System.out.println("发送消息" + textMessage.getText());
- }
- //8.关闭连接
- connection.close();
- }
- }
- appConsumerTopic代码:标红字体是做出了修改,由创建队列改为了创建主题。
- package com.liu.jms;
- import org.apache.activemq.ActiveMQConnectionFactory;
- import javax.jms.*;
- public class appConsumerTopic {
- private static final String url = "tcp://127.0.0.1:61616";
- private static final String topicName = "topic-test";//定义主题的名称
- public static void main(String[] args) throws JMSException {
- //1.创建connectionFactory
- ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
- //2.创建connection
- Connection connection = connectionFactory.createConnection();
- //3.启动连接
- connection.start();
- //4.创建session
- Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
- //5.创建destination
- Destination destination = session.createTopic(topicName);
- //6.创建消费者
- MessageConsumer consumer = session.createConsumer(destination);
- //7.创建一个监听器
- consumer.setMessageListener(new MessageListener() {
- @Override
- public void onMessage(Message message) {
- TextMessage textMessage = (TextMessage)message;
- try {
- System.out.println("接收到的消息:" + textMessage.getText());
- } catch (JMSException e) {
- e.printStackTrace();
- }
- }
- });
- //8.关闭连接(监听器是异步的还没有监听到消息的时候,就关闭连接了)
- //connection.close();
- }
- }
3.测试
首先启动消费者这个java类,观察控制台,如下图:
接着启动生产者的java类,观察控制台,如下图:生产了一百条消息。
此时切换至消费的控制台,观察控制台,如下图:已经打印出了一百条消息了,说明消费者已经接受到全部一百条消息。
6.打开activemq的控制台查看topics:(http://127.0.0.1:8161/admin/topics.jsp)如下图所示:有一个名字是我们设置的queue-test的主题,消费者也有一个就是我们创建的那个消费者类,主题中有一百条消息,被移除了一百条,也就是上面所说的,消费者接收到了这100条全部的消息。
7.那么如果我启动了两个订阅相同的消费者呢?为了结果能清晰,重启activemq服务,关掉之前的Java类启动,然后启动两边消费者,再启动一个生产者。如下图:生产者生产了100条消息。
8.分别看看两个消费者的接收消息,如下两张图:两个消费者都接受到了一模一样的100条消息。
9.总结:主题订阅发布模式,有多个消费的订阅相同时,消费者不会相互相互影响,都会分别接收到生产者的全部消息。
学习ActiveMQ(三):发布/订阅模式(topic)演示的更多相关文章
- ACtiveMQ中间件-发布订阅模式
前言:ActiveMQ学习心得 1.MQ是什么 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信, ...
- ActiveMQ (二)—发布订阅模式
ActiveMQ的另一种模式就SUB/HUB即发布订阅模式,是SUB/hub就是一拖N的USB分线器的意思.意思就是一个来源分到N个出口.还是上节的例子,当一个订单产生后,后台N个系统需要联动,但有一 ...
- SpringBoot2.0之整合ActiveMQ(发布订阅模式)
发布订阅模式与前面的点对点模式很类似,简直一毛一样 注意:发布订阅模式 先启动消费者 公用pom: <project xmlns="http://maven.apache.org/PO ...
- RabbitMQ入门学习系列(四) 发布订阅模式
发布订阅模式 什么时发布订阅模式 把消息发送给多个订阅者.也就是有多个消费端都完整的接收生产者的消息 换句话说 把消息广播给多个消费者 消息模型的核心 RabbitMQ不发送消息给队列,生产者也不知道 ...
- 【ActiveMQ】- 发布/订阅模式
publish/subscribe 特点:A发送的消息可以被所有监听A的对象的接收,就好比学校的广播,所有的学生都可以收听校园广播信息. 消息生产者: package com.zhiwei.advan ...
- 第三节: List类型的介绍、生产者消费者模式、发布订阅模式
一. List类型基础 1.介绍 它是一个双向链表,支持左进.左出.右进.右出,所以它即可以充当队列使用,也可以充当栈使用. (1). 队列:先进先出, 可以利用List左进右出,或者右进左出(Lis ...
- ActiveMQ入门系列三:发布/订阅模式
在上一篇<ActiveMQ入门系列二:入门代码实例(点对点模式)>中提到了ActiveMQ中的两种模式:点对点模式(PTP)和发布/订阅模式(Pub & Sub),详细介绍了点对点 ...
- RabbitMQ学习第三记:发布/订阅模式(Publish/Subscribe)
工作队列模式是直接在生产者与消费者里声明好一个队列,这种情况下消息只会对应同类型的消费者. 举个用户注册的列子:用户在注册完后一般都会发送消息通知用户注册成功(失败).如果在一个系统中,用户注册信息有 ...
- ActiveMQ的p2p模式与发布订阅模式
1.消息中间件:采用异步通讯防止,支持点对点以及发布订阅模式,可以解决高并发问题 传统调用接口,可能发生阻塞,重复提交,超时等等问题,可以利用消息中间件发送异步通讯请求 ...
随机推荐
- CF1139C Edgy Trees
题目地址:CF1139C Edgy Trees 红黑树 \(ans\) 应该等于总数(\(n^k\))减去不含黑色边的序列数量 不含黑色边就意味着一个序列只能在一个红色联通块中 一个红色联通块中的序列 ...
- Fast RCNN 中的 Hard Negative Mining
 Fast RCNN 中将与 groud truth 的 IoU 在 [0.1, 0.5) 之间标记为负例, [0, 0.1) 的 example 用于 hard negative mining. ...
- .Net三层架构
.Net三层架构 希望朋友们留下自己对三层架构的理解... 三层体系结构的概念 用户界面表示层(USL) 业务逻辑层(BLL) 数据访问层(DAL) BLL将USL与DAL隔开了,并且加入了业务规 ...
- C#基础之Assembly
一直以来,我们都在用C#编写程序,编写程序的时候,我们用到继承.多态.接口以及泛型,我们也都明白子类可以继承抽象类,并能够重写父类的抽象方法,可是大家是否想过,如下几个问题: 1.凡树必有根和叶,类的 ...
- 【原创】大数据基础之Spark(1)Spark Submit即Spark任务提交过程
Spark2.1.1 一 Spark Submit本地解析 1.1 现象 提交命令: spark-submit --master local[10] --driver-memory 30g --cla ...
- 金蝶K3 WISE BOM多级展开_BOM成本表
/****** Object: StoredProcedure [dbo].[pro_bobang_BOMCost] Script Date: 07/29/2015 16:09:11 ******/ ...
- beta冲刺5/7
目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(5/7) 团队部分 后敬甲(组长) 过去两天完成了哪些任务 ppt制作中 数据集标注 接下来的计划 制作p ...
- elasticsearch单机部署多个节点
cp -r elasticsearch-2.4.4 elasticsearch-2.4.4-2 mv elasticsearch-2.4.4 elasticsearch-2.4.4-1 总共cp了三个 ...
- Hadoop开启后jps显示只有jps
之前在用Mapreduce写代码时,在DFS Location下的会报一个error,大体的意思就是与主机名相关的错误 然后我就觉得可能时Hadoop开启时出了错误,然后我就重启了Hadoop,jps ...
- 数组方括号有趣的split方法
今天看到了split的方法感觉好神奇的样子 split是javascript内置方法 就像join方法是连接数组并转换为字符串一样split方法是把数组拆分成多个部分,而且每一个部分都是数组的元素. ...