RMQ路由中心NS和消息发送笔记

文章详细介绍了RMQ的NameServer如何管理路由,包括消息生产者如何发现消息服务器,NameServer如何检测Broker的可用性,以及高可用性和负载均衡策略。在Broker宕机或消息发送失败时,系统通过心跳检测和容错机制确保消息的发送。同时,提到了消息发送的同步、异步和单向方式,以及如何处理批量消息的一致性问题。
摘要由CSDN通过智能技术生成

【RMQ路由中心-NameServer】
路由管理
服务注册
服务发现

消息生产者如何知道消息发往哪台消息服务器Broker?
某一台消息服务器Broker宕机后,消息生产者如何在不重启的情况下感知?

高可用、高性能:
生产者集群、消息服务器Broker集群、消费者集群、NameServer管理集群

NameServer集群
互相独立,彼此不通信,每10秒扫描brokerLive表,如果判断某个Broker前一次发送消息后,超过120秒还未收到任何心跳,则认为该Broker不可用,从表中移除路由。

Broker集群
各实例启动时,向所有NameServer进行注册,用于路由发现;然后用长连接每隔30秒向NameServer发送心跳、topic配置

消息生产者集群
发送消息之前从NS读取Broker地址列表,根据负载算法,选择一个实例,向其发送消息;
消息发送前,需要先获取topic的路由信息,才能知道要发送到哪个Broker;
第一次发送时,本地没有缓存topic的路由信息,请求NS获取,更新到本地路由信息表;
缓存机制:每隔30秒将NS的topic路由信息缓存进行更新。

消息消费者集群
长连接每隔30秒请求NS,获取实时的topic信息

注意:
NS每隔10秒检测一次,期间如果某个Broker宕机后,则无法立即感知,则需要在发送端提供容错机制
用于保证消息发送高可用。

消息发送方式
(1)同步:发送后阻塞等待,直到Broker返回发送结果
(2)异步:发送后立即返回,异步回调在新的线程中执行
(3)单向:只管发,发完就返回,不管成功失败

消息队列如何进行负载均衡?

消息发送如何实现高可用?
默认使用轮询算法进行负载均衡;
消息发送失败,默认重试两次;
消息第一次发送失败后,为了保证重试的可靠性,重试时避开刚刚接收到失败的Broker,选择其他Broker上的队列发送
举例:
假定topicA的路由信息:Broker1上有q1、q2、q3、q4四个队列,Broker2上有q1、q2、q3、q4四个队列
如果B1q1发送失败,则轮询下次采用B1q2,如果B1宕机了,则轮询没有意义
解决办法:发送失败时对Broker进行规避,比如在接下来的5分钟选择队列时,B1将不参与负载均衡

消息发送失败的故障延迟机制是什么?

消息发送流程是什么?

批量消息如何实现一致性?

DefaultMQProducer消息生产者可以干什么?
(1)创建主题:指定主题名、队列数量
(2)发送消息(三种方式)+ 系统负载算法指定队列;发送消息(三种方式)+ 特定队列;发送消息(三种方式)+ 特定负载算法;同步批量
(3)查找消息队列中的最大/最小物理偏移量;根据偏移量查找消息;根据主题+消息ID查找消息;
(4)根据时间戳从队列中搜索偏移量,用于快速定位是哪个commitLog文件

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值