2012-03-26 33 views
0

我有一個JMS客戶端,它正在向具有優先級的Weblogic隊列發送消息。爲了讓事情變得簡單,我們設置了兩個優先級0 & 9.Spring MDP不遵循JMS優先級

在服務器端,我們在該隊列上部署了一個Spring應用程序(帶有Spring MDP-消息驅動的Pojo)。這裏是Spring Bean聲明:

<bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> 
    <property name="concurrentConsumers" value="20" /> 
    <property name="connectionFactory" ref="jmsFactory" /> 
    <property name="destination"> 
     <bean class="org.springframework.jndi.JndiObjectFactoryBean"> 
      <property name="jndiTemplate" ref="jndiTemplate" /> 
      <property name="jndiName" value="${jms.inbound.queue}" /> 
     </bean> 
    </property> 
    <property name="messageListener" ref="appMessageListener" /> 
</bean> 

appMessageListener - 是實現Message偵聽器並具有onMessage方法的類。

測試:停止應用程序併發送40個優先級爲0和20的請求20,優先級爲9.啓動應用程序。

預期結果是MDP應該選擇並優先處理優先級爲9的消息,然後是優先級爲0的消息。

在現實中消息被挑選和處理隨機的(最有可能的順序,他們進來)

要或檢查的優先級設置不是我們打印JMSMEssage.getPriority()JMS偵聽器的onMessage方法內,它會正確打印優先級(混合20 P9和20 P0)

Spring DefaultMessageListenerContainer是否無法處理JMS優先級?

任何指針,將不勝感激。

應用詳細信息 - Weblogic 11g,Java 1.6,Spring 3.0。所有隊列都有文件存儲。

回答

0

傻了,我沒有配置目的鍵進行排序。

如果任何一個來到這個線程執行相同的混日子了作爲我來說,閱讀這樣的: 這裏是如何做到這一點 在管理控制檯中,導航至要配置目標的關鍵資源: 導航到JMS系統模塊中的資源 導航到應用程序模塊中的JMS資源 在配置>常規選項卡上: o在排序鍵中,選擇要排序的消息排序鍵名稱或消息標題字段的名稱。 (排序鍵 - 消息排序關鍵字或消息報頭字段的名稱在其上進行排序消息報頭字段的鍵啓動以字母JMS並忽略鍵類型設置 屬性:屬性被設置爲:JMSPriority

它工作!!!