原创 RocketMQ存儲篇——Consumequeue

Consumequeue類對應的是每個topic和queuId下面的所有文件。Consumequeue類文件的存儲路徑默認爲$HOME/store/consumequeue/{topic}/{queueId}/{fileName}

原创 RocketMQ存儲篇——IndexFile和IndexService

1 IndexFile 爲操作Index文件提供訪問服務,Index文件的存儲位置是:$HOME \store\index\${fileName},文件名fileName是以創建時的時間戳命名的,文件大小是固定的,等於40+500

原创 Dubbo——Exchange信息交換層

Exchange信息交換層1、Exchange層的類分析ReferenceCountExchangeClient:將請求交HeaderExchangeClient處理,不進行任何其他操作。HeaderExchangeClient:提供心跳

原创 Dubbo——服務治理

服務治理Dubbo提供了集羣部署、路由、負載均衡等容錯機制,在客戶端引用服務時,由MockClusterInvoker封裝具體的集羣策略類,默認是FailoverCluster類,具體邏輯見《4.4.2 遠程引用服務》部分。由集羣策略類將

原创 RocketMQ存儲篇——HA高可用

在集羣模式的部署方式中,Master與Slave配對是通過指定相同的brokerName參數來配對,Master的BrokerId必須是0,Slave的BrokerId必須是大於0的數。一個Master下面可以掛載多個Slave,

原创 如何保障微服務架構下的數據一致性

1、微服務架構的數據一致性問題 以電商平臺爲例,當用戶下單並支付後,系統需要修改訂單的狀態並且增加用戶積分。由於系統採用的是微服務架構,分離出了支付服務、訂單服務和積分服務,每個服務都有獨立數據庫做數據存儲。當用戶支付成功後,無論是修改訂

原创 RocketMQ——Consumer篇:PUSH模式下消費消息(順序和併發兩種)

1 接受並處理Broker返回的響應消息 當發送拉取消息在Broker返回響應消息之後調用NettyRemotingAbstract.processMessageReceived(ChannelHandlerContext ctx, Re

原创 RocketMQ——從NameServer更新客戶端訂閱的topic路由信息

由Producer或Consumer端調用MQClientInstance. updateTopicRouteInfoFromNameServer()方法的目的主要有: 1)從NameServer獲取該客戶端訂閱的每個topic的相關信息

原创 RocketMQ——Consumer篇:PUSH模式下的消息拉取(DefaultMQPushConsumer)

DefaultMQPushConsumerImpl中各個對象的主要功能如下: RebalancePushImpl:主要負責決定,當前的consumer應該從哪些Queue中消費消息; 1)PullAPIWrapper:長連接,負責從bro

原创 RocketMQ——其他注意事項

1 消息過濾的方式 1、簡單消息過濾。訂閱時指定topic下面tags; 2、高級消息過濾。 2.1)Broker所在的機器會啓動多個FilterServer過濾進程; 2.2)Consumer啓動後,會向FilterServer上傳一個

原创 RocketMQ——Consumer篇:PULL消費模式下的調度消費服務

與PUSH模式相比,PULL模式需要應用層不間斷地進行拉取消息然後再執行消費處理,提高了應用層的編碼複雜度,爲了Pull方式的編程複雜度,RocketMQ提供了調度消費服務(MQPullConsumerScheduleService),在

原创 RocketMQ——Broker篇

1 Broker的初始化過程 調用BrokerController對象的initialize方法進行初始化工作。大致邏輯如下: 1、加載topics.json、consumerOffset.json、subscriptionGroup.

原创 RocketMQ——Producer篇:其他功能介紹

1 向Broker發送心跳消息 1、初始化HeartbeatData對象,將該Producer或Consumer的ClientID賦值給HeartbeatData對象的clientID變量; 2、遍歷MQClientInstance.c

原创 RocketMQ——Consumer篇:PULL模式下的消息消費(DefaultMQPullConsumer)

1 應用層的使用方式 在應用層初始化DefaultMQPullConsumer類,然後調用該類的start方法啓動Consumer;接下來的消費步驟如下: 1、調用DefaultMQPullConsumer.fetchSubscribeM

原创 RocketMQ——Producer篇:發送事務消息

該事務消息是指Producer端的業務邏輯處理與向MQ發送消息事件是在同一個事務裏面,即這兩件事件要麼同時成功要麼同時失敗。 可以解決如下類似場景的問題:A用戶和B用戶的賬戶體系不在同一臺服務器上面,現在A用戶向B用戶轉賬100元,爲了