【问题标题】:How to inject a message selector to message listener bean in jms-spring integration?如何在 jms-spring 集成中向消息侦听器 bean 注入消息选择器?
【发布时间】:2018-11-19 15:40:28
【问题描述】:

我正在使用 JMS API(使用 HornetQ),并且我正在使用 spring bean 用于消息侦听器容器和消息侦听器:

<bean id="messageListener" class="core.messaging.handler.MessageListener">
    <property name="postCommandService" ref="postCommandService" />
</bean>

<bean id="messageSender"
    class="lsn.messaging.sender.MessageSender">
    <property name="connectionFactory" ref="connectionFactory" />
    <property name="destination" ref="destination" />
</bean>

<bean id="msgListenerContainer"
  class="org.springframework.jms.listener.DefaultMessageListenerContainer" 
  p:connectionFactory-ref="connectionFactory"
  p:destination-ref="destination"
  p:messageListener-ref="messageListener"
  p:concurrentConsumers="10"
  p:maxConcurrentConsumers="50"
  p:receiveTimeout="5000"
  p:idleTaskExecutionLimit="10"
  p:idleConsumerLimit="5" />

如果我想要我的消息监听器,只使用特定的消息(具有相同的 StringProperty)我应该怎么做?我应该在哪里定义选择器?

我有以下解决方案,但我没有 MessageConsumer,所以我无法向它添加选择器:

     String redSelector = "color='red'";

     MessageConsumer redConsumer = session.createConsumer(queue, redSelector);
     redConsumer.setMessageListener(new SimpleMessageListener("red"));

     TextMessage redMessage = session.createTextMessage("Red");
     redMessage.setStringProperty("color", "red");

     producer.send(redMessage);

【问题讨论】:

    标签: spring jms messaging


    【解决方案1】:

    您应该可以通过这种方式将其添加到MessageListenerContainer

    p:messageSelector="color='red'"

    【讨论】:

    • 谢谢! MessageListenerContainer 可以有多个目的地吗?还是多个 messageListener?
    • 对于超过 1 个目的地,您可能只需注册更多 messagelistenercontainers - 对于每个容器超过 1 个 messagelistener - 您基本上可以在 messagelistener 内部调度它 - 在 messagelistener 中获取消息并将消息委托给消息侦听器中的更多 bean。
    猜你喜欢
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多