Spring MDP不遵循JMS优先级

时间:2012-03-26 13:02:31

标签: spring jms

我有一个JMS客户端正在优先发送消息到Weblogic队列。为了简单起见,我们将2个优先级设置为0& 9。

在服务器端,我们在该队列上部署了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的20个。启动应用程序。

期望结果是MDP应首先选择并处理优先级为9的消息,然后是优先级为0的消息。

实际上,邮件是随机挑选和处理的(最有可能是他们进来的顺序)

要检查是否设置了优先级,我们在JMS Listener的onMessage方法中打印JMSMEssage.getPriority(),并正确打印优先级(20 P9和20 P0的混合)

Spring DefaultMessageListenerContainer是否无法处理JMS优先级?

任何关于此的指示都将受到赞赏。

应用程序详细信息 - Weblogic 11g,Java 1.6,Spring 3.0。所有队列都有文件存储。

1 个答案:

答案 0 :(得分:0)

愚蠢的我,我没有配置目的地键进行排序。

如果有人和我一起做这个话题,请阅读: 这是怎么做的 在管理控制台中,导航到要配置的目标密钥资源: 导航到系统模块中的JMS资源 导航到应用程序模块中的JMS资源 在配置&gt;常规选项卡:        o在“排序键”中,选择要排序的消息排序键名称或消息标题字段的名称。 (排序键 - 消息排序键或要排序的消息标题字段的名称。消息标题字段键以字母JMS开头,忽略键类型设置。 属性:要设置为的属性:JMSPriority

它有效!!!