ActiveMQ(十二)——Consumer高級特性

一、獨有消費者
    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”);

二、消息異步分發
ActiveMQ(十二)——Consumer高級特性
三、消息優先級
ActiveMQ(十二)——Consumer高級特性
三、管理持久化消息
ActiveMQ(十二)——Consumer高級特性
四、消息分組
    消息分組可以看成是一種併發的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的所有消息,直到:
ActiveMQ(十二)——Consumer高級特性

  • 創建一個Message Groups,只需要在message對象上設置屬性即可,如下:
    message.setStringProperty("JMSXGroupID","GroupA");

  • 關閉一個Message Groups,只需要在message對象上設置屬性即可,如下:
    message.setStringProperty("JMSXGroupID","GroupA");
    Message.setIntProperty("JMSXGroupSeq",-1);
    六、消息選擇器
    ActiveMQ(十二)——Consumer高級特性
    七、消息重遞策略
    ActiveMQ(十二)——Consumer高級特性
    ActiveMQ(十二)——Consumer高級特性
    ActiveMQ(十二)——Consumer高級特性
    八、消費者追溯消息
    ActiveMQ(十二)——Consumer高級特性
    九、慢消費者處理
    ActiveMQ(十二)——Consumer高級特性
    ActiveMQ(十二)——Consumer高級特性
    ActiveMQ(十二)——Consumer高級特性
    ActiveMQ(十二)——Consumer高級特性
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章