我们可以在 Spring 集成的消息选择器中提供 XML 标签吗?



我正在为消息侦听器使用以下配置:

<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)的文档。

最新更新