spring集成JMS消息驱动的通道适配器使用选择器

时间:2017-04-21 17:47:29

标签: java jms spring-integration spring-jms

print sys.path

使用消息驱动的适配器,我想使用选择器从AMQ代理过滤消息。

消息必须根据动态bean变量值进行过滤,该变量值使用selector bean ref option

进行验证

1 个答案:

答案 0 :(得分:1)

回复你的意见..

  

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

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

上面的selector属性具有bean方法,配置为每当从AMQ中选择消息时动态地接收头param。但它在语法上是错误的,无法传递标题参数。你能帮忙吗?

您似乎无法理解JMS消息选择器是什么......

selector="foo='bar'"

...告诉代理只发送foo属性等于bar的消息。 它在启动期间在消费者上配置。

你拥有的不是&#34;动态&#34;。在上下文初始化期间,#{...}表达式被计算一次。

你想做的事没有意义;没有&#34;消息&#34;从中评估标题。您无法根据消息内容告诉代理要发送哪些消息。在发送消息之前,在代理上完成过滤。

如果你不介意&#34;失去&#34;您不感兴趣的消息(或正在从主题中消费)并且您想要过滤要处理的消息,然后添加

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

适配器之后。您可以使用丢弃通道将被忽略的消息重新发布到另一个队列(或对它们执行其他操作)。