2017-04-21 120 views
0

<int-jms:message-driven-channel-adapter>弹簧一体化JMS消息驱动的通道适配器使用选择

使用消息驱动的适配器,我要使用选择器从AMQ经纪人过滤消息。

消息来进行筛选,其使用选择豆裁判选项

+0

你的问题不清楚;选择器不能在运行时更改(不停止/启动容器);它在初始化期间被烘烤到消费者中。 –

+0

感谢您的回复,我想使用消息驱动通道适配器中的选择器属性来过滤消息。我能够在选择器属性@bean.method()中调用bean方法,但无法将头参数传递给该方法@bean.method(header.param)。我期待选择器应该动态验证将标头参数传递给bean方法并返回布尔结果,以便可以过滤消息。 – Augustin

+0

上面的选择器属性有bean方法配置为每当从AMQ选择消息时都动态地接收头部参数,但是它在语法上错误不能传递头部参数能否帮助 – Augustin

回答

1

在回答您的意见验证动态豆变量值..

感谢您的回复,我想用选择来过滤消息消息驱动通道适配器中的属性。我能够在选择器属性@bean.method()中调用bean方法,但无法将头参数传递给该方法@bean.method(header.param)。我期待选择器应该动态验证将标头参数传递给bean方法并返回布尔结果,以便可以过滤消息。

<int-jms:message-driven-channel-adapter connection-factory="connectionFactoryName" 
    destination="destinationName" channel="channelName" 
    selector="#{@bean.method(header.param)}" auto-startup="false"/> 

上述选择属性具有配置成从AMQ动态接收头PARAM每当拾取消息bean方法。但它在语法上错误不能传递头部参数。你能帮我吗?

你似乎并不理解一个JMS消息选择是什么...

selector="foo='bar'" 

...告诉经纪人只与foo属性等于bar发送消息。 它在启动期间在消费者上配置。

你有什么不是“动态”。 #{...}表达式在上下文初始化过程中被评估一次。

你试图做的事情没有意义;没有评价标题的“消息”。根据消息的内容,您无法告诉代理发送哪些消息。过滤是在发送消息之前在代理上完成的。

如果你不介意的“失去”你的消息不感兴趣(或由一个主题是消费),并要筛选要处理消息,然后添加一个

<filter ... expression="#{@bean.method(header.param)}" /> 

适配器后。您可以使用丢弃通道将被忽略的消息重新发布到另一个队列(或者用它们做其他事情)。

相关问题