您好,登錄后才能下訂單哦!
一、獨有消費者
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”);
二、消息異步分發
三、消息優先級
三、管理持久化消息
四、消息分組
消息分組可以看成是一種并發的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的所有消息,直到:
創建一個Message Groups,只需要在message對象上設置屬性即可,如下:
message.setStringProperty("JMSXGroupID","GroupA");
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。