原创 RocketMQ源碼解析—客戶端消息發送

閱讀須知 文章中使用/* */註釋的方法會做深入分析 正文 在使用 RocketMQ 進行消息發送時,我們可以使用 DefaultMQProducer.send 方法進行消息發送,send 方法有很多重載的版本,我們通過最簡單

原创 淺談長連接保活機制

前言 在日常工作中,我們經常會接觸到長連接這個概念,例如一些RPC框架(如Dubbo)、網絡通信框架(Netty)等,都會涉及到長連接的概念,我們來探究一下長連接是如何保活的。 長連接&短連接 首先我們要知道,TCP本身是沒有長連

原创 RocketMQ源碼解析—客戶端消息消費

閱讀須知 文章中使用/* */註釋的方法會做深入分析 正文 在分析初始化和啓動流程時,我們看到無論是 Consumer 還是 Producer 都會初始化和啓動 MQClientInstance,而在 MQClientInst

原创 RocketMQ源碼解析之Producer停止

閱讀須知 文章中使用/* */註釋的方法會做深入分析 正文 Producer 的停止同樣可以依託於 Spring bean 的生命週期,在 Spring bean 銷燬時調用 DefaultMQProducer 的 shutd

原创 RocketMQ源碼解析之Consumer啓動

閱讀須知 文章中使用/* */註釋的方法會做深入分析 正文 Consumer 的啓動流程和 Producer 的啓動流程有很多複用的部分,前面我們已經分析過 Producer 的啓動流程,複用部分這裏不再重複。 使用 Rock

原创 RocketMQ源碼解析之Producer啓動

閱讀須知 文章中使用/* */註釋的方法會做深入分析 正文 使用RocketMQ發送普通消息時,一般我們會進行如下配置: <bean id="rocketmqProducer" class="org.apache.rocketmq

原创 RocketMQ源碼解析之Consumer停止

閱讀須知 文章中使用/* */註釋的方法會做深入分析 正文 Consumer 的停止流程和 Producer 的停止流程有很多複用的部分,前面我們已經分析過 Producer 的停止流程,複用部分這裏不再重複。Consumer

原创 爲什麼InnoDB使用B+樹作爲索引數據結構

關於B+樹的思考 我們都知道,MySQL索引的數據結構是B+樹,通常我們衡量一個數據結構的好壞主要是通過時間和空間兩個維度,空間我們暫且不談,時間來看,B+樹查詢的時間複雜度爲O(log(n)),這樣來說,比B+樹查詢速度快的數據

原创 RocketMQ源碼解析—Broker處理消息發送請求

閱讀須知 文章中使用/* */註釋的方法會做深入分析 正文 在前面分析Broker的文章,我們看到,Broker其實同樣也是用 NettyRemotingServer 來處理遠程調用,在之前分析NameServer的請求處理源

原创 RocketMQ整體結構

RocketMQ 結構 概述 Apache RocketMQ是一個分佈式消息傳遞和流平臺,具有低延遲,高性能和可靠性,萬億級容量和靈活的可擴展性。它由四部分組成:NameServer、broker、producer 和 cons

原创 CQRS架構窺探

CQRS簡介 命令查詢的責任分離Command Query Responsibility Segregation (簡稱CQRS) 模式是一種架構體系模式,能夠使改變模型狀態和查詢模型狀態的動作實現分離,簡單理解就是讀寫分離。屬於

原创 RocketMQ源碼解析之Broker消息刷盤

閱讀須知 文章中使用/* */註釋的方法會做深入分析 正文 在RocketMQ源碼解析之Broker消息存儲這篇文章中我們分析了Broker消息存儲流程,流程的最後一步,就是將消息刷盤: CommitLog: public voi

原创 RocketMQ源碼解析之Broker消息存儲

閱讀須知 文章中使用/* */註釋的方法會做深入分析 正文 在前面分析的Broker處理client發送請求流程中,我們看到了Broker會存放來自client的消息,我們來分析消息的存儲流程。 DefaultMessageS

原创 冒泡排序淺析

簡介 冒泡排序(Bubble Sort),是一種計算機科學領域的較簡單的排序算法。 它重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果他們的順序(如從大到小、首字母從A到Z)錯誤就把他們交換過來。走訪元素的工作是重複地進行直到

原创 RocketMQ源碼解析之Broker啓動

閱讀須知 文章中使用/* */註釋的方法會做深入分析 正文 之前我們分析了Broker初始化流程,接下來我們來看Broker的啓動流程: BrokerStartup: public static BrokerController