1. 程式人生 > >JMS學習十一 ActiveMQ Consumer高階特性之獨有消費者(Exclusive Consumer)

JMS學習十一 ActiveMQ Consumer高階特性之獨有消費者(Exclusive Consumer)

一、簡介

Queue中的訊息是按照順序被分發到consumers的。然而,當你有多個consumers同時從相同的queue中提取訊息時,

你將失去這個保證。因為這些訊息是被多個執行緒併發的處理。有的時候,保證訊息按照順序處理是很重要的。

如,你可能不希望在插入訂單操作結束之前執行更新這個訂單的操作。

  技術分享

二、使用

ActiveMQ從4.x版本起開始支援Exclusive Consumer。 Broker會從多個consumers中挑選一個consumer來處理queue中

所有的訊息,從而保證了訊息的有序處理。如果這個consumer失效,那麼broker會自動切換到其它的consumer。 

可以通過DestinationOptions 來建立一個Exclusive Consumer,如下:

queue = new ActiveMQQueue("TEST.QUEUE?consumer.exclusive=true");
consumer = session.createConsumer(queue);

 

還可以給consumer設定優先順序,以便針對網路情況進行優化,如下:

queue = new ActiveMQQueue("TEST.QUEUE?consumer.exclusive=true&consumer.priority=10");

A.         當在接收資訊的時候有一個或者多個備份接收訊息者和一個獨佔訊息者的同時接收時候,無論兩者建立先後,在接收的時候,均為獨佔訊息者接收。

B.         當在接收資訊的時候,有多個獨佔消費者的時候,只有一個獨佔消費者可以接收到訊息。

C.         當有多個備份訊息者和多個獨佔消費者的時候,當所有的獨佔消費者均close的時候,只有一個備份消費者接到到訊息。

 

解決一個佇列並行問題:

通過排隊服務

 

拆分業務邏輯 consumer 處理不同的業務,處理完後響應,確認訊息消費成功,當10條全部消費完畢,

又或者是根據具體業務情況,例如只有8條訊息處理成功,程式是繼續執行,記錄日誌,事後處理,還是立即資料回滾?靈活處理