JMS 监听消息选择器selector详解编程语言

业务场景: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/13688.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论