本文主要介绍一下ActiveMQ消息独占模式
1、消息独占模式(Exclusive Consumer)
Queue中的消息是按照顺序被分发到consumers的。然而,当你有多个consumers同时从相同的queue中提取消息时,你将失去这个保证。因为这些消息是被多个线程并发的处理。有的时候,保证消息按照顺序处理是很重要的。例如,你可能不希望在插入订单操作结束之前执行更新这个订单的操作。 ActiveMQ从4.x版本起开始支持Exclusive Consumer (或者说Exclusive Queues)。 Broker会从多个consumers中挑选一个consumer来处理queue中所有的消息,从而保证了消息的有序处理。如果这个consumer失效,那么broker会自动切换到其它的consumer。 可以通过Destination Options 来创建一个Exclusive Consumer,如下:
Java代码
1. queue = new ActiveMQQueue("TEST.QUEUE?consumer.exclusive=true");
2. consumer = session.createConsumer(queue);
顺便说一下,可以给consumer设置优先级,以便针对网络情况(如network hops)进行优化,如下:
Java代码
1. queue = new ActiveMQQueue("TEST.QUEUE?consumer.exclusive=true &consumer.priority=10");
2、支持负载均衡的消息的顺序消费思路
(1)以一个订单产生为例,用户进行下单时会产生订单,订单生成成功,则需要减库存等一系列操作。类似上述场景都需要消息顺序高效的执行。
(2)如果使用独占消费者模式可以解决顺序消费的问题,但是如果当订单量非常庞大时,每次消息中间上的数据只能交给一个消费者去处理,这样效率就会很低。
(3)解决这个问题的思路是,可以在消息中间件(Broker)与Consumer之间添加一个集群(cluster,代理服务器角色)该集群主要目的用于将broker上的消息进行排队,该cluster的大致设计是可以创建一个ConcurrentHashMap的队列,队列的key可以使用String类型的订单ID,value可以使用一个ConcurrentLinkedQueue的队列。这样每次通过一些业务逻辑处理,将代理服务器的消息推送给每一个Consumer(这里的Consumer也可以是一个集群),对于每一个Consumer而言,在处理一个订单数据时,每处理完一个订单里的一条消息时都要将消息的返回结果通知代理服务器,代理服务器得知订单中消息的处理情况后,就可以将同一个订单中的第二条数据推送给另外一个Consumer,第二个Consumer的处理逻辑与第一个的相同。这样处理方式可以保证每一个订单的数据消息都是顺序执行的。在这个期间对于第一个Cosumer而言,还可以并发处理第二个订单中的消息。对于整个系统而言,顺序处理消息的时间可能没有特别大的变化,但是对于整个系统而言,系统的吞吐量变大了。
相关推荐
springboot整合 activeMq 消费者 消费接收消息 包含队列模式点对点发 以及 主题模式一对多 这是消费者的demo consumer 。 里面有消息重发机制,手动确认ACK模式。 配合 producer 生产者demo使用。
java整合activemq的demo,生产者和消费者两个方法。结合自带的工具http://192.168.1.106:8161。来查看消息传递情况
activemq queue模式,事务、应答、转发模式、MessageConsumer的receive阻塞方法的测试
ActiveMQ的队列模式,初学ActiveMQ的,一个很好的体验、入门,代码注释很清楚,JMS的java使用步骤
NULL 博文链接:https://zhaoshijie.iteye.com/blog/2090954
ActiveMQ-Topic订阅发布模式:参考博文:http://blog.csdn.net/ABAP_Brave/article/details/71211334
ActiveMQ_使用failover模式进行连接切换时,线程断开 ,ActiveMQ_使用failover模式进行连接切换时,线程断开
activemq生产者和消费者案例代码.zipactivemq生产者和消费者案例代码.zip
ActiveMQ整合Spring(多消费者)
先到官网下载activemq,启动后,就可以直接运行项目文件了
activemq linux下的多线程客户端,在windows下同样适用,包含生产消息客户端,和消费者消息客户端,以及生产者消息多线程客户端
学习总结资料
动态创建ActiveMQ消费者
使用SpringBoot开发的ActiveMQ生产者/消费者的demo。相关内容可以看这里: https://my.oschina.net/noryar/blog/1575003
本文来自于cnblogs,文章主要案例为主来介绍ActiveMQ消息的消费原理,从方法到过程以及方案等方面详细介绍。这里说了两种方法,两种方法可以接收消息,一种是使用同步阻塞的ActiveMQMessageConsumer#receive方法。另...
一个订阅通道,支持多个客户端监听,当某个客户端掉线后,再上线的时候可以收到它没有接收到的消息。
springboot+activemq, 用代码讲解了activemq的2中处理模式:PTP与PUB/SUB, 具体讲解已经在文章中介绍过了
springboot整合activemq案例,queue,topic两种模式 定时运行和controller请求运行两种方式
我下载的时候是 ActiveMQ 5.14.4 Release版 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们。消息传递指的是...
ActiveMQ主备自动failover方案 ActiveMQ5.8.0版本的主备有两种方式:共享文件系统、共享数据库。性能上共享文件系统要优于共享数据库。 本文档采用共享文件系统的方式实现主备。共享文件系统最好使用分布式文件存储...