RocketMq总结

MQ的主要特点为解耦、异步、削峰。或者说
1、系统解耦
2、流量削峰
3、异步分发
用于减少数据库压力的业务场景,其中RocketMQ的核心组件概念如下:

Producer:生产发送消息
Broker:存储Producer发送过来的消息
Consumer:从Broker拉取消息并进行消费
NameServer:为Producer或Consumer路由到Broker

RocketMq
集群工作流程
1、启动NameServer,等待Broker,Producer,Consumer连接,NameServer相当于注册中心,用于路由控制。
2、Broker启动,跟所有NameServer保持长连接,心跳机制,定时发送心跳包,心跳包包含当前Broker信息(IP+端口)以及存储所有的Topic信息。
心跳:
心跳间隔:每隔30秒(此时间无法更改)向所有nameserver发送心跳,心跳包含了自身的topic配置信息。
心跳超时:nameserver每隔10秒钟(此时间无法更改),扫描所有还存活的broker连接,若某个连接2分钟内(当前时间与最后更新时间差值超过2分钟,此时间无法更改)没有发送心跳数据,则断开连接。
断路:
时机:broker挂掉;心跳超时导致nameserver主动关闭连接
动作:一旦连接断开,nameserver会立即感知,更新topic与队列的对应关系,但不会通知生产者和消费者
3、producer,单个producer与其中一台nameserver建立长连接,定时查询topic配置信息,轮询时间,每隔30秒(非心跳机制)从nameserver获取所有topic的最新队列情况。
单个producer与所有broker建立长连接。
心跳:
默认情况下,生产者每隔30秒向所有broker发送心跳,该时间由DefaultMQProducer的heartbeatBrokerInterval参数决定,可手动配置。broker每隔10秒钟(此时间无法更改),扫描所有还存活的连接,若某个连接2分钟内(当前时间与最后更新时间差值超过2分钟,此时间无法更改)没有发送心跳数据,则关闭连接。
4、consumer,单个消费者和一台nameserver保持长连接,定时查询topic配置信息,如果该nameserver挂掉,消费者会自动连接下一个nameserver,直到有可用连接为止,并能自动重连。
默认情况下,消费者每隔30秒从nameserver获取所有topic的最新队列情况,这意味着某个broker如果宕机,客户端最多要30秒才能感知。该时间由DefaultMQPushConsumer的pollNameServerInteval参数决定,可手动配置。
单个消费者和该消费者关联的所有broker保持长连接。
默认情况下,消费者每隔30秒向所有broker发送心跳,该时间由DefaultMQPushConsumer的heartbeatBrokerInterval参数决定,可手动配置。broker每隔10秒钟(此时间无法更改),扫描所有还存活的连接,若某个连接2分钟内(当前时间与最后更新时间差值超过2分钟,此时间无法更改)没有发送心跳数据,则关闭连接,并向该消费者分组的所有消费者发出通知,分组内消费者重新分配队列继续消费。

原文地址:https://www.cnblogs.com/stubborn-dude/p/14710089.html