【问题标题】:spring integration JMS message driven channel adaptor using selector使用选择器的spring集成JMS消息驱动通道适配器
【发布时间】:2017-09-18 19:55:42
【问题描述】:

<int-jms:message-driven-channel-adapter>

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

消息必须针对使用选择器 bean ref 选项验证的动态 bean 变量值进行过滤

【问题讨论】:

  • 你的问题不清楚;选择器不能在运行时更改(无需停止/启动容器);它在初始化期间被烘焙到消费者中。
  • 感谢您的回复,我想使用消息驱动通道适配器中的选择器属性过滤消息。我能够在选择器属性 @bean.method() 中调用 bean 方法,但无法将标头参数传递给该方法 @bean.method(header.param) 。我期望选择器应该验证动态地将标头参数传递给 bean 方法并返回布尔结果,以便可以过滤消息。
  • 上面的选择器属性具有配置为在从 AMQ 选择消息时动态接收标头参数的 bean 方法。但是无法传递标头参数在语法上是错误的。你能帮忙吗
  • 不要在 cmets 中放这样的东西;很难阅读;改为编辑问题。看我的回答,你好像不明白什么是消息选择器。

标签: java jms spring-integration spring-jms


【解决方案1】:

回复你的cmets..

感谢您的回复,我想使用消息驱动通道适配器中的选择器属性过滤消息。我能够在选择器属性 @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 选择消息时动态接收标头参数的 bean 方法。但是无法传递标头参数在语法上是错误的。你能帮忙吗?

你似乎不明白什么是 JMS 消息选择器...

selector="foo='bar'"

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

你所拥有的不是“动态的”。 #{...} 表达式在上下文初始化期间计算一次。

您尝试做的事情毫无意义;还没有用于评估标头的“消息”。您无法根据消息的内容告诉代理要发送哪些消息。过滤是在发送消息之前在代理上完成的。

如果您不介意“丢失”您不感兴趣(或正在从某个主题消费)的消息,并且想要过滤您想要处理的消息,那么添加一个

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

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

【讨论】:

    猜你喜欢
    • 2014-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 2018-08-24
    • 2015-09-10
    • 1970-01-01
    相关资源
    最近更新 更多