1、独有消费者
Queue中的消息是按照顺序被分发到consumers的,然而,当有多个consumers同时从相同的queue中提取消息时,你将失去这个保证。由于这些消息是被多个多线程并发的处理。有的时候,保证消息按照顺序处理是很重要的,可是你可能不但愿在插入订单操做结束以前执行更新这个订单的操做。
ActiveMQ从4.x版本起开始支持Exclusive Consumer。Broker会从多
个consumers中挑选一个consumer来处理queue中全部的消息,从而保证消息的有序处理。若是这个consumer失效,那么broker会自动切换到其余的consumer。能够经过Destination Options来建立一个Exclusive Consumer,以下:
queue = new ActiveMQ(“TEST.QUEUE?Consumer.exclusive=true”);
Consumer = session.createConsumer(queue);
还能够给consumer设置优先级,以便针对网络状况进行优化,以下:网络
queue = new ActiveMQQueue(“TEST.QUEUE?Consumer.exclusive=true &consumer.priority=10”);
2、消息异步分发
3、消息优先级
3、管理持久化消息
4、消息分组
消息分组能够当作是一种并发的Exclusive Consumer。跟全部的消息都由惟一的consumer处理不一样,JMS消息属性JMSXGroupID被用来区分message group。
Message Groups特性保证全部具备相同JMSXGroupID的消息会被分发到相同的consumer(只要这个consumer保持active)
另外一方面,消息分组特性也是一种负载均衡的机制。在一个消息被分发到consumer以前,broker首先检查消息JMSXGroupID属性。若是存在,那么broker会检查是否有某个consumer拥有这个message group。
若是没有,那么broker会选择一个consumer,并将它关联到这个message group。此后,这个consumer会接收这个message group的全部消息,直到:session
建立一个Message Groups,只须要在message对象上设置属性便可,以下:
message.setStringProperty("JMSXGroupID","GroupA");多线程