Apache RocketMQ 从入门到实战中关于默认主题的路由信息中,会包含两个 Broker 分别各 8 个队列信息。 Step2:生产者寻找路由信息 生产者首先向 NameServer 查询路由信息,由于是一个不存在的主题,故此时返回的 路由信息为空,RocketMQ 会使用默认的主题再次寻找,由于开启了自动创建路由信息, NameServer 会向生产者返回默认主题的路由信息。然后从返回的路由信息中选择一个队 列(默认轮询)。消息发送者从 Nameserver 如果开启了 transientStorePoolEnable,则使用 ByteBuffer.allocateDirect(fileSiz e),创建(java.nio 的内存映射机制)。如果未开启,则为空。 MappedByteBuffer mappedByteBuffer 使用 FileChannel#map 方法创建,即真正意义上的 PageCache。 消息写入时: MappedFi 消息发送 system busy、broker busy 原因分析与解决方案坑 从中可见,在消息写入时,如果 writerBuffer 不为空,说明开启了 transientStorePo olEnable 机制,则消息首先写入 writerBuffer 中,如果其为空,则写入 mappedByteBu ffer 中。 消息拉取(读消息): MappedFile#selectMappedBuffer0 码力 | 165 页 | 12.53 MB | 1 年前3
消息中间件RocketMQ原理解析 - 斩秋messageQueueList.size 为队列集合的下标 每次获取 queue 都会通过 sendWhichQueue 加一来实现对所有 queue 的轮询 如果入参 lastBrokerName 不为空,代表上次选择的 queue 发送失败,这次选 择应该避开同一个 queue 3) Producer 发消息系统重试: 发送失败后,重试几次 retryTimesWhenSendFailed = 地址更新,没有配置所 有 broker 会想 namesrv 注册,从 namesrv 获取 haServerAddr,然后更新到 HAClient 当HAClient的MasterAddress不为空的时候(因为broker master 和slave都构建了HAClient) 会主动连接 master 获取 SocketChannel Master 监听 Slave 请求的端口,默认为服务端口+10 码力 | 57 页 | 2.39 MB | 1 年前3
共 2 条
- 1













