尽量少啰嗦。
1.部署组成
由图可知,rocketMq的运转至少需要4个组成部分:Producer(生产者),NameService(路由中心),Broker(消息服务费)和Consumer(消费者)。
下面依次总结。
2.Producer
2.1 消息发送方式
同步:producer发送消息后,等待broker返回发送结果。
异步:producer发送消息时,指定回调函数,发送消息后直接返回。后面实际发送结果,由broker通知回调函数,producer在另一个线程种异步处理。
单向:producer发送消息后,不关心发送结果直接返回。
2.2 消息发送
对于DefaultMQProducer消息发送者,默认发送消息超时时间是3s(sendMsgTimeout),发送失败重试次数是2次(retryTimesWhenSendFailed/retryTimesWhenSendAsyncFailed),消息最大长度是4M(maxMessageSize)。
消息发送失败时,重试有broker隔离机制。即将该broker的所有messageQueue都隔离,默认30s。也就是说30s内不向这些messageQueue发送消息。
sendLatencyFaultEnable=true启用。
2.3 批量发送
支持同一个topic的多条消息打包发送,但发送消息总长度不得超过maxMessageSize。
3.NameServer
Broker启动时会向所有NameServer注册,Producer在发送消息之前会从NameServer拿到Broker地址列表,然后根据负载均衡算法得出其中一台Broker并发送消息。因此,每台NameServer和每台Broker都是长链接。
Broker每隔30s向所有的NameServer发送心跳,NameServer接到后会更新lastUpdateTimeStamp,然后NameServer每隔10s扫描brokerLiveTable里的各Broker的lastUpdateTimeStamp,发现少于120s没有心跳的,则移除该Broker并关闭Socket连接。