2012-03-26 54 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

它工作!!!