文档章节

ActiveMQ发布订阅模式

短短的歼击机
 短短的歼击机
发布于 2015/08/24 22:14
字数 524
阅读 139
收藏 1

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

ActiveMQ的另一种模式就SUB/HUB即发布订阅模式,是SUB/hub就是一拖N的USB分线器的意思。意思就是一个来源分到N个出口。还是上节的例子,当一个订单产生后,后台N个系统需要联动,但有一个前提是都需要收到订单信息,那么我们就需要将一个生产者的消息发布到N个消费者。

生产者:

 

复制代码
try { //Create the Connection Factory  IConnectionFactory factory = new ConnectionFactory("tcp://localhost:61616/"); using (IConnection connection = factory.CreateConnection())
                { //Create the Session  using (ISession session = connection.CreateSession())
                    { //Create the Producer for the topic/queue  IMessageProducer prod = session.CreateProducer( new Apache.NMS.ActiveMQ.Commands.ActiveMQTopic("testing")); //Send Messages  int i = 0; while (!Console.KeyAvailable)
                        {
                            ITextMessage msg = prod.CreateTextMessage();
                            msg.Text = i.ToString();
                            Console.WriteLine("Sending: " + i.ToString());
                            prod.Send(msg, Apache.NMS.MsgDeliveryMode.NonPersistent, Apache.NMS.MsgPriority.Normal, TimeSpan.MinValue);

                            System.Threading.Thread.Sleep(5000);
                            i++;
                        }
                    }
                }

                Console.ReadLine();
            } catch (System.Exception e)
            {
                Console.WriteLine("{0}", e.Message);
                Console.ReadLine();
            }
复制代码

假设生产者每5秒发送一次消息:

wps3E59.tmp

消费者:

复制代码
static void Main(string[] args)
        { try { //Create the Connection factory  IConnectionFactory factory = new ConnectionFactory("tcp://localhost:61616/"); //Create the connection  using (IConnection connection = factory.CreateConnection())  
                {  
                    connection.ClientId = "testing listener1";  
                    connection.Start(); //Create the Session  using (ISession session = connection.CreateSession())  
                    { //Create the Consumer  IMessageConsumer consumer = session.CreateDurableConsumer(new Apache.NMS.ActiveMQ.Commands.ActiveMQTopic("testing"), "testing listener1", null, false);  
                          
                        consumer.Listener += new MessageListener(consumer_Listener);  
  
                        Console.ReadLine();  
                    }  
                    connection.Stop();  
                    connection.Close();  
                }  
            } catch (System.Exception e)  
            {  
                Console.WriteLine(e.Message);  
            }  
        } static void consumer_Listener(IMessage message)  
        { try {  
                ITextMessage msg = (ITextMessage)message;  
                Console.WriteLine("Receive: " + msg.Text);  
           } catch (System.Exception e)  
            {  
                Console.WriteLine(e.Message);  
            }  
        }
复制代码

 

启动一个消费者:

wps3E5A.tmp

我们发现他是从15开始的,而不是像上节一样从头开始,再启动另一个消费者:

wps3E5B.tmp

我们发现就是从启动时开始接受消息的,之前的消息就丢失了。

整体状态如下:

wps3E6B.tmp

我们观察管理界面:

wps3E6C.tmp

产生了一个testing的Topics,而订阅方有2个都订阅的是testing:

wps3E6D.tmp

这样只需要在需要获取消息的地方订阅即可及时获得。

源代码下载

本文转载自:http://www.cnblogs.com/madyina/p/4127144.html

短短的歼击机

短短的歼击机

粉丝 85
博文 268
码字总数 269797
作品 0
武汉
高级程序员
私信 提问
加载中

评论(0)

Springboot整合ActiveMQ(Queue和Topic两种模式)

写在前面: 从2018年底开始学习SpringBoot,也用SpringBoot写过一些项目。这里对学习Springboot的一些知识总结记录一下。如果你也在学习SpringBoot,可以关注我,一起学习,一起进步。 文章目...

一枕江风
04/09
0
0
ActiveMQ的安装与使用。

1、什么是ActiveMQ 1 ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是...

osc_g5vuxtsj
2019/09/19
2
0
springboot整合activeMQ

  消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。消息形式支持...

QianTLL
05/07
0
0
ActiveMQ在Center OS7上的安装以及在windows上访问activemq

什么是消息中间件   百度:消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成,      通过提供消息床底和消息排队模型,它可以在分...

osc_zegihifx
2018/11/17
4
0
Spring boot 整合ActiveMQ 和持久化

pom.xml配置 parent Spring 版本 springboot整合activeMQ案例,queue、topic两种模式 参数配置含义和基本功能 spring boot集成ActiveMQ 同时监听queue和Topic Activemq 介绍消息的发送/消费消...

osc_lrhgywny
2019/12/27
30
0

没有更多内容

加载失败,请刷新页面

加载更多

可以让你用到老的IntelliJ idea 破解法子

看下效果图如下: 安装的时候选择试用,然后进入idea 下载插件 插件地址 然后将jetbrains-agent.jar文件拖入到idea中 然后重启 然后选择Activation code 然后就ojbk了...

布袋和尚_爱吃鱼
22分钟前
15
0
获取类对象的四种方式

/* * 获取类对象的三种方式 * */ public static void main(String[] args) throws Exception { //1、Class.forName 【建议】 Class<?> clazz1 = Class.forName("com.czxy.demo2.Person"); //......

费先森
37分钟前
21
0
2020中台建设-技术中台的搭建和运营

2020中台建设-技术中台的搭建和运营

Original123
45分钟前
22
0
CTO:不要在 Java 代码中写 set/get 方法了,逮一次罚款

前言 what?你的 Java 代码中还充斥着大量的 set/get 方法? 我们在刚开始学习 Java 语言的时候讲过,面向对象的三大特征就是封装,继承,和多态。在 Java 中,要保证封装性,需要将成员变量...

码农突围
54分钟前
21
0
为什么不推荐去做安全测试工程师?

对,你没看错。我不推荐大家去做安全测试工程师。 为什么不推荐大家去做安全测试? 今天,很多软件并没有经过专门的安全测试便运行在互联网上,它们携带着各类安全漏洞直接暴露在公众面前,其...

爱码小哥
今天
32
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部