如何在jms-spring集成中将消息选择器注入消息监听器bean?

Ary*_*rya 8 messaging spring jms

我正在使用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" />
Run Code Online (Sandbox Code Playgroud)

如果我想要我的消息监听器,只消耗特定的消息(具有相同的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);
Run Code Online (Sandbox Code Playgroud)

Bij*_*men 8

您应该能够以这种方式将它添加到MessageListenerContainer:

p:messageSelector="color='red'"

  • 对于大于1个的目标,你可能只需要注册多个messagelistenercontainers - 关于每个集装箱超过1个消息监听 - 你基本上可以派遣它内部的消息监听内 - 得到消息监听内部的消息,并委托该消息到消息监听内豆类. (3认同)