ActiveMQ学习笔记9-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、队列无序并不意味着消息无序

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值