RocketMq中MessageQueue的分配

本文探讨了RocketMq中MessageQueue的分配,包括RocketMq的结构、消息队列的三大类型以及Producer和Consumer如何选择和获取消息队列。分析了Producer的三种选择队列方式,并揭示了Consumer通过长轮询机制从Broker拉取消息的过程。此外,还介绍了RocketMq的队列数量默认设置和分配策略。
摘要由CSDN通过智能技术生成

都知道Rocketmq中有ConsumerGroup的概念。在集群模式下,多台服务器配置相同的ConsumerGroup,能够使得每次只有一台服务器消费消息(注意,但不保证只消费一次,存在网络抖动的情况)。那么,笔者就很疑惑,Rocketmq是如何实现这个模式的?如何保证只有一台服务器消费?

虽然答案很简单,但却是一个很好的带着问题看源码的机会。

RocketMq结构

从图中可以看到,MQ主要投递消息和拉取消息两个环节。

众多的架构都是顺应时代潮流而来,Rocketmq的结构体系当然也不是阿里所独创的,而是依据AMQP协议而来。Rocketmq中的Producer,Broker,以及Consumer都是依据AMQP中的概念衍生出来的。所以这里不妨讲讲AMQP(Advanced Message Queuing Protocal,高级消息队列协议),便于大家更好的理解技术的发展过程。

paper下载 http://www.amqp.org/specification/0-9-1/amqp-org-download

  • Broker: 接收和分发的应用
  • Virtual host:出于多租户和安全因素,把AMQP的基本组件划分到一个虚拟分组中。各个租户之间是网络隔离的,类似Linux中的namespace概念(可自行Google)
  • Connection:publisher/consumer 和broker之间的TCP连接
  • Channel:是相较于Connection更加轻量的连接,是Connection上的逻辑连接
  • Exchange: 负责将message分发到不同的Queue中
  • Queue: 消息最终会落到Queue中,消息由Broker push给Consumer或者由Consumer来pull消息
  • Binding:exchange和queue之间的消息路由策略

消息队列的3大类型

当然基于这样一个协议,不单单是RocketMq一个闪耀在消息队列选型中,还有不同的消息队列。

https://mp.weixin.qq.com/s/B1D-J_1wpaqj0sxcmaArbQ

主要分为了3大阵营:

  • 有Broker 重Topic流:kafka,JMS
  • 有Broker 轻Topic流: RocketMQ
  • 无Broker: ZeroMQ

当然,如果熟悉了AMQP协议,你也可以选择自研一个消息队列

https://zhuanlan.zhihu.com/p/28967866

了解了一些背景,来看下RocketM

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值