ActiveMQ:设置多个并行的消费者

消息队列本来就是一种经典的生产者与消费者模式。生产者向消息队列中发送消息,消费者从消息队列中获取消息来消费。

 

 

消息的传送一般由一个代理来实现的,那就是Message broker(即消息代理)。Message broker有两大职责,一是消息路由,二是数据转换。这就好比A给B寄信,如果不使用邮局的话,就要自己想办法送达,费时费力,而通过邮局的话,只要B的地址在邮局中注册过,那么天涯海角也能送达。这里的邮局扮演的角色就像消息系统中的Message broker。

 

众所周知,消息队列是典型的’send and forget’原则的体现,生产者只管发送,不管消息的后续处理。为了最大效率的完成对消息队列中的消息的消费,一般可以同时起多个一模一样的消费者,以并行的方式来拉取消息队列中的消息。这样的好处有多个:

  1. 加快处理消息队列中的消息。

  2. 增强稳定性,如果一个消费者出现问题,不会影响对消息队列中消息的处理。

 

使用Spring JMS来配置多个Listener实例其实也相当简单,只需要配置下MessageListenerContainer就行。

 

 

1
2
3
4
5
6
 
  1. <bean class="org.springframework.jms.listener.SimpleMessageListenerContainer">

  2. <property name="connectionFactory" ref="connectionFactory"/>

  3. <property name="destinationName" value="${jms.queue.name}"/>

  4. <property name="messageListener" ref="messageReceiver"/>

  5. <property name="concurrentConsumers" value="4"/>

  6. </bean>

  7.  

 

多配置一个属性concurrentConsumers,设置值为4,就是同时启动4个Listener实例来消费消息。

使用MessageSender来发送100条消息,可以检查消息处理的顺序会发生变化。

 

 

1
2
3
 
  1. for (int i = 0; i < 100; i++) {

  2. messageSender.send(String.format("message %d",i));

  3. }

  4.  

 

 

1
2
3
4
5
6
7
8
9
 
  1. ...

  2. Received: message 4

  3. Received: message 7

  4. Received: message 6

  5. Received: message 5

  6. Received: message 8

  7. Received: message 10

  8. Received: message 9

  9.  

 

除了设置一个固定的Listener数量,也可以设置一个Listener区间,这样MessageListenerContainer可以根据消息队列中的消息规模自动调整并行数量。

 

 

1
2
3
4
5
6
 
  1. <bean class="org.springframework.jms.listener.SimpleMessageListenerContainer">

  2. <property name="connectionFactory" ref="connectionFactory"/>

  3. <property name="destinationName" value="${jms.queue.name}"/>

  4. <property name="messageListener" ref="messageReceiver"/>

  5. <property name="concurrency" value="4-8"/>

  6. </bean>

  7.  

 

这次使用的是concurrency属性,4-8表示最小并发数是4,最大并发数为8,当然也可以给一个固定值,比如5,这样就相当于concurrentConsumers属性了。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值