您的位置:首页 > 其它

ActiveMQ学习笔记9-ActiveMQ顺序问题

2019-06-29 14:31 106 查看

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、队列无序并不意味着消息无序

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: