AMQ consumer clusters 理解

最进公司负责新的业务,使用了amq。写完后再部署consmuer的时候,产生了疑问。到底这个consumer 的高可用策略是怎么样的?启动多个到底行不行?问了公司的几个老人,也没说出个所以然来。fuck!自己google,官方文档。
终于看到了些眉目,下面总结下:
基于amq的高可用方案分为 3个层次。
1、生产者的高可用
生产者的高可用和负载均衡,一般是靠外围程序控制。比如,基于Tomcat的web程序作为生产者,那么这个web程序的高可用,需要靠tomcat等外围程序。目前一般我们的web程序都是多个点的,负载已经做好,所以我们所以一般所说的高可用,主要指Broker和Consumer。


2、Broker 高可用方案
这个目前文档挺多的,这里就不再过多说了,这篇两篇档写的还是很不错的。
http://www.cnblogs.com/xumanbu/p/4740381.html
http://bh-keven.iteye.com/blog/1617788


3、 消费者高可用方案(consumer clusters)
这里想多说下,目前网上讨论这个方案的还不是很多,因为amq 帮我们已经做好。可以我这个人就是爱较真,非得知道个所以然来,只能自己google和翻看官方文档。
首先我先列举下目前网络上的介绍。
(1)同一个queue,如果一个consumer失效,那么未被确认的消息都会被发送到这个queue的其它consumer上。
如果某个consumer处理消息比较快,那么它将处理更多的消息。
问题:具体的策略有哪些?如何配置?


(2)stackoverflow 上的 http://stackoverflow.com/questions/5005747/queue-consumer-clusters-with-activemq。
看了这个回复还是有点收获的。
说到这就不得不说prefetch buffers(预取缓冲区) 了。(http://activemq.apache.org/what-is-the-prefetch-limit-for.html)
具体看到官网才了解到amq是基于SEDA(Staged Event Driven Architecture) 的异步架构。了解到amq是推的模式(区别于kafka 啦的模式)。这是信息消费的自然结果通常是比消息传递慢得多,所以amq 增加prefetch limit 限制发送到消费端的个数限制,防止其被冲垮。当消费者处理一半后,amq又会推送消息到prefetch buffers 中。 (摘自 http://activemq.apache.org/what-is-the-prefetch-limit-for.html)
回过来说consumer的负载处理,http://activemq.apache.org/dispatch-policies.html 这里已经说得很清楚了,默认是使用轮询推送到消费者、或是顺序推送(消费者的预取缓冲器将耗尽在调度过程中选择下一个消费者)。

 <dispatchPolicy>
          <roundRobinDispatchPolicy />
 <!--<strictOrderDispatchPolicy /> -->

</dispatchPolicy>









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值