1. 程式人生 > >ActiveMQ(23):Consumer高級特性之Message dispatche async、Consumer Priority與Message Selectors

ActiveMQ(23):Consumer高級特性之Message dispatche async、Consumer Priority與Message Selectors

jms activemq message dispatche async consumer priority message selectors

一、Message dispatche async(消息異步分發)

在activemq4.0以後,你可以選擇broker同步或異步的把消息分發給消費者。可以設置dispatchAsync 屬性,默認是true,通常情況下這是最佳的。

修改:可以通過如下幾種方式

1:在ConnectionFactory層設置

((ActiveMQConnectionFactory)connectionFactory).setDispatchAsync(false);

2:在Connection上設置

這個設置將會覆蓋ConnectionFactory上的設置

((ActiveMQConnection)connection).setDispatchAsync(false);

3:在Consumer來設置

queue = new ActiveMQQueue("TEST.QUEUE?consumer.dispatchAsync=false");

consumer = session.createConsumer(queue);

二、Consumer Priority(消費者優先級)

JMS JMSPriority 定義了十個消息優先級值,0 是最低的優先級,9 是最高的優先級。另外,客戶端應當將0‐4 看作普通優先級,5‐9 看作加急優先級


Consumer的Priority的劃分為0~127個級別,127是最高的級別,0是最低的也是ActiveMQ默認的。 這種配置可以讓Broker根據Consumer的優先級來發送消息先到較高的優先級的Consumer上,如果某個較高的Consumer的消息裝載慢,則Broker會把消息發送到僅次於它優先級的Consumer上。


如何定義Consumer Priority的優先級呢? 配置如下:

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

consumer = session.createConsumer(queue);

三、Message Selectors(消息選擇器)

JMS Selectors用在獲取消息的時候,可以基於消息屬性和Xpath語法對消息進行過濾。JMS Selectors由SQL92語義定義。以下是個Selectors的例子:

consumer = session.createConsumer(destination, "JMSType = ‘car‘ AND weight > 2500");


1:JMS Selectors表達式中,可以使用IN、NOT IN、LIKE等

2:需要註意的是,JMS Selectors表達式中的日期和時間需要使用標準的long型毫秒值

3:表達式中的屬性不會自動進行類型轉換,例如:

myMessage.setStringProperty("NumberOfOrders", "2");

那麽此時“NumberOfOrders > 1” 求值結果會是false

4:Message Groups雖然可以保證具有相同message group的消息被唯一的consumer順序處理,但是卻不能確定被哪個consumer處理。在某些情況下,Message Groups可以和JMS Selector一起工作,

例如:

設想有三個consumers分別是A、B和C。你可以在producer中為消息設置三個message groups分別是“A”、“B”和“C”。然後令consumer A使用“JMXGroupID = ‘A’”作為selector。B和C也同理。這樣就可以保證message group A的消息只被consumer A處理。需要註意的是,這種做法有以下缺點:

(1)producer必須知道當前正在運行的consumers,也就是說producer和consumer被耦合到一起。

(2)如果某個consumer失效,那麽應該被這個consumer消費的消息將會一直被積壓在broker上。


本文出自 “我愛大金子” 博客,請務必保留此出處http://1754966750.blog.51cto.com/7455444/1924922

ActiveMQ(23):Consumer高級特性之Message dispatche async、Consumer Priority與Message Selectors