业务场景:A系统通过一个队列(假定队列名是queueA)向B系统发送消息,后来业务调整,B系统拆分为两个系统B1,B2,分别处理不同的业务,并且分别都需要从queueA中获取不同的消息。为了不改变A系统的逻辑,即A系统还通过一个队列向B1,B2发不同的消息。B1,B2去自动选择得到属于自己的消息,可以使用消息过滤器。具体的做法是在创建消费者的时候指定选择器。
发送的时候添加属性
TextMessage textMessage = session.createTextMessage(jsonString);
//设置消息的属性
if(options!=null){
for (String key : options.keySet()) {
textMessage.setStringProperty(key, options.get(key));
}
}
配置监听的时候加上 messageSelector
<bean id="nettyListenerContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="messageSelector" value="clientID='${NettyQ.clientID}'" ></property>
<!-- 消息监听器,就是同时启动几个Listener实例来消费消息。 -->
<!--<property name="concurrency" value="5-20"></property>/> -->
<property name="concurrency" value="${NettyQ.concurrency}" ></property>
<property name="connectionFactory" ref="pooledconnectionFactory"></property>
<!-- 监听的队列名称 -->
<property name="destinationName" value="${NettyQ.outQueueName}"></property>
<!-- 监听的接收类 -->
<property name="messageListener" ref="nettyConsumer"></property>
</bean>
messageSelector 对上的才会下载