ActiveMQ学习笔记9-ActiveMQ顺序问题
ActiveMQ顺序问题
**
有时消息发送存在顺序性,那么在ActiveMQ中如何解决顺序问题。MQ中有优先级配置,但是消息发送不一定按照优先级发送,所以优先级解决不了顺序。下面有3种解决顺序问题的解决方案,每个解决方案都有各自适合的场景。
**
activeMQ的独占模式
原理
在ActiveMQ4.x中可以采用Exclusive Consumer或者Exclusive Queues,避免这种情况,Broker会从消息队列中,一次发送消息给一个消息消费者来保证顺序。初始化独占式消费方代码如下:
原则
A.当在接收信息的时候有一个或者多个备份接收消息者和一个独占消息者的同时接收时候,无论两者创建先后,在接收的时候,均为独占消息者接收。
B.当在接收信息的时候,有多个独占消费者的时候,只有一个独占消费者可以接收到消息。
C.当有多个备份消息者和多个独占消费者的时候,当所有的独占消费者均close的时候,只有一个备份消费者接到到消息。
备注:备份消费者为不带任何参数的消费者。
总结起来就是,代理者会在消费者中选择一个作为主消费者并且将所有消息都按顺序发送给它,如果该主消费者挂掉,那么将立即启用故障切换到下一个消费者。
activeMQ的分组模式
原理
Message Groups特性是一种负载均衡的机制。在一个消息被分发到consumer之前,broker首先检查消息JMSXGroupID属性。如果存在,那么broker会检查是否有某个consumer拥有这个message group。如果没有,那么broker会选择一个consumer,并将它关联到这个message group。此后,这个consumer会接收这个message group的所有消息,直到:Consumer被关闭或者Message group被关闭(通过发送一个消息,并设置这个消息的JMSXGroupSeq为-1)
实现
请参照ActiveMQ选择器这一章节。
业务解决
通过合理的设计或者将问题分解来规避。
1、不关注乱序的应用实际大量存在
2、队列无序并不意味着消息无序
- Golang map 顺序问题?
- Ajax执行顺序流程及回调问题分析
- C#执行Oracle的Sql语句 参数顺序问题
- 记录vue绑定class和style出现先后顺序问题
- 基于java.util.logging实现轻量级日志记录库(增加根据当前类class初始化,修复线程池模型(javaEE)下的堆栈轨迹顺序与当前调用方法不一致问题)
- 百度地图 坐标转换 顺序问题
- 深析静态链接库和动态链接库相同函数覆盖及库调用顺序问题
- 关于C++输出流cout的执行顺序问题
- 关于常量和变量比较时的顺序问题
- 关于UrlHttpConnection.setRequestProperty()的调用顺序问题的验证
- gcc 编译顺序的问题
- MySQL中Redo与Binlog顺序一致性问题?
- 层的显示顺序问题
- Ubuntu ufw防火墙规则顺序问题
- 动态引入的外部 JS 文件在各浏览器中的加载顺序不一致问题解决
- js有程序段不执行的时候 可能是顺序问题
- C语言用数组1. 简单约瑟夫环问题: N个人,编号从1~N围成一圈,输入一个数T,从1号开始报数,报到T的人出圈;下一人又从1开始报数,下一个报到T的人出圈,输出出圈顺序。 考虑问实现约瑟夫环问题
- activemq问题
- 关于数组的问题(连续子数组的最大和、数组中出现次数超过一半的数字、调整数组顺序使奇数位于偶数之前)
- 关于派生类构造函数与基类构造函数的调用顺序问题