业务场景: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 对上的才会下载
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/industrynews/13688.html