初识RocketMQ(1)

RocketMQ 消息中间件,原先是阿里内部使用,后来捐赠给Apache基金,成为顶级的开源项目之一。经历过多次的双十一洗礼和考验,性能可靠,最高单台7万TPS。用Java开发,相比较其他的消息中间件(RqbbitMQ 用Erlong语言、Kfka用Scala语言)更容易找到技术人员进行定制开发,也能更好的理解RocketMQ系统运行,毕竟源码看起来顺手一点。

理解RocketMQ可以类比为寄信:需要寄信人投递到邮箱,然后邮局送到另一个邮箱,收信的人在另一端取信,还有以一个全国的邮政系统,用来管理各地的邮箱。Rocket分为四大块:生产者Producer(寄信人)、消费者Consumer(收信人)、broker(邮箱)、NameServer(邮局系统)。寄信是按照地址和姓名传递,RockerMQ是按照主题Topic进行传递,寄信的时候可以选择接受与否,MQ也可以根据信息的Tag标签来过滤。
在这里插入图片描述
RocketMQ系统启动的时候,Broker先向所有的NameServer进行注册,NameServer保存Broker的信息。Procuder发消息前先向NameServer申请Broker的信息,得到Broker的信息后向具体的broker发送,broker将发送的信息保存,然后将等Consumer消费掉信息。NameServer、Broker都可以部署多台服务器来构成集群,提高系统的可用性。

RocketMQ是通过主题Topic来发送、订阅的,由NameServer保存Topic的信息,当Producer发送消息是,必须表明消息的Topic,Consumer按照对应的Topic来消费消息。

NameServer:是整个系统的大脑,存储Broker、Topic等信息。存放了5种信息:

topicQueueTable:Topic消息队列路由信息,消息发送时根据路由表进行负载均衡。
结构的Key是Topic的名称,Value是个QueueDate队列,长度是topic存储的所有的Master Broker数量,QueueDate存储Broker的名称,读写队列的数量,标志

brokerAddrTable:Broker基础信息,包括brokerName,所属集群、主备地址。相同名称的Broker可能有多个,通过BrokerId来区分,BrokerId为0表示为Master,不为0的为slave。brokerAddrTable存储一个brokerName的属性,包括所属cluster集群、Master的地址和各个Slave的地址。

clusterAddrTable:Broker集群信息,存储集群中所有的Broker名称

brokerLiveTable:Broker状态信息,NameServer每次收到心跳包时会替换该信息。这个的Key为broker的地址,value包括了最近更新心跳包的时间

filterServerTable:Broker上的FileteServer列表,用于类模式消息过滤。这个的key也是Broker的地址,Value是和这个Broker关联的多个FilterServer的地址。

Broker启动时向所有的NameServer发送心跳包,每隔30S向集群中的NameServer发送心跳包。NameServer接受到心跳包后,会保存在对应的brokerLiveTable里,记录这个Broker最新的更新心跳包的时间。NameServer每隔10S扫描一次brokerLiveTable,如果发现某个Broker超过120S还眉头更新心跳包,则移除该Broker的路由信息,并且关闭Socket连接。同时更新topicQueueTable、brokerAddrTable、filterServerTable。

NameServer的高可用可以通过部署多台服务器来构成集群,但他们彼此之间并不通信,只是Broker统一的向所有的NameServer服务器注册。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值