我有一个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。所有队列都有文件存储。
答案 0 :(得分:0)
愚蠢的我,我没有配置目的地键进行排序。
如果有人和我一起做这个话题,请阅读: 这是怎么做的 在管理控制台中,导航到要配置的目标密钥资源: 导航到系统模块中的JMS资源 导航到应用程序模块中的JMS资源 在配置&gt;常规选项卡: o在“排序键”中,选择要排序的消息排序键名称或消息标题字段的名称。 (排序键 - 消息排序键或要排序的消息标题字段的名称。消息标题字段键以字母JMS开头,忽略键类型设置。 属性:要设置为的属性:JMSPriority
它有效!!!