我正在为消息侦听器使用以下配置:
<bean id="container"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="autoStartup" value="true" />
<property name="connectionFactory" ref="connectionFactory" />
<property name="destinationName" value="queue.name" />
<property name="pubSubDomain" value="true" />
<property name="pubSubNoLocal" value="true" />
<property name="durableSubscriptionName" value="subscription.id" />
<property name="subscriptionDurable" value="true" />
<property name="concurrency" value="1" />
<property name="messageSelector" value="Trade IS NOT NULL" />
<property name="sessionTransacted" value="true" />
</bean>
在消息选择器中,Trade 指的是我应该通过 JMS 接收的 XML 标签名称。
这是行不通的。我搜索了很多。我没有获得有关如何在消息选择器中放置此条件的太多线索。
No.
请参阅消息选择器教程(谷歌:"jms 消息选择器教程")。
具体说来:
然后,消息使用者仅接收其标头和属性与选择器匹配的消息。(请参阅邮件头和邮件属性。消息选择器不能根据消息正文的内容选择消息。
您无法选择任意消息内容。您需要让发件人在发送之前将标记的内容添加为消息属性。
编辑:
请不要使用旧的文档参考;使用当前的文档或最新的文档始终可以在项目页面上找到
要使用 Spring Integration 进行过滤(使用后),您可以使用 XPathFilter:
<int-xml:xpath-filter id="booleanFilter" input-channel="booleanFilterInput" discard-channel="booleanFilterRejections">
<si-xml:xpath-expression expression="/foo/bar"/>
</int-xml:xpath-filter>
这将传递具有<bar>...</bar>
子元素的任何<foo>...</foo>
文档,并拒绝那些没有(或不是 foos)的文档。