RocketMQ學習Broker流程、生產者和存儲流程聯系

                        小編:管理員 60閱讀 2022.08.03

                        Broker作為代理,路由注冊是通過Broker與nameServer的心跳功能實現的。除此之外,還聯系了生產者和消費者、存儲。因此可以知道Broker是非常重要的。在生產者發送消息時會將發送的消息結果sendResult放入到SendMessageContext,而此時發送消息處理器會根據上下文放入的發送結果,進行消息的存儲工作putMessage操作,由于我看的源碼是4.7.0的,因此可以看到在處理數據包上,消息發送處理器中sendMessage的操作已經沒有使用,而使用的異步發送消息處理的方式。Broker的啟動流程如下:

                        而此時我們可以看到生產者借助BrokerController的處理器Processor進行了處理將數據包信息放入到了存儲DefaultMessageStore中的asyncPutMessage中。

                        可以看到發送消息的核心在sendKernelImpl中,而在發送消息和存儲之間的聯系方法MQClientApi#sendMessageAsync,在這個方法中,發送消息的同時,會將發送的結果放入到SendMessageContext中。這樣發送消息處理器就可以進行存儲操作了,此時會調用DefaultMessageStore#asyncSendMessage。

                        放入消息之后,進行操作體現在asyncSendMessage中。將消息以異步方式存儲到存儲器中,處理器可以處理下一個請求,而不是在結果完成后等待結果,以異步方式通知客戶端。此時可以看到asyncPutMessage的操作中會進入到CommitLog中,此時進行提交日志操作,此時會執行寫入到ByteBuffer中,然后刷盤到硬盤中。同時執行統計操作,進行HA同步。

                        關聯標簽:
                        少妇各种各样BBBⅩXX