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");多線程