JMS 监听消息选择器selector

当A系统向B1、B2系统发送不同业务消息时,为避免修改A系统,采用消息选择器在queueA中实现消息过滤。B1、B2在创建消费者时指定选择器,接收匹配的消息。发送时设置消息属性,监听时配置messageSelector以筛选所需消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

业务场景: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 对上的才会下载


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值