国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java面試之消息隊列

番茄西紅柿 / 1393人閱讀

摘要:將消息持久化成功之后,向發送方確認消息已經發送成功,此時消息為半消息。發送方收到消息回查后,需要檢查對應消息的本地事務執行的最終結果。發送方根據檢查得到的本地事務的最終狀態再次提交二次確認,仍按照步驟對半消息進行操作。

1.應用場景

    解耦

    異步

    流量消峰

    日志記錄

2.重復消息的解決方案

    消費端處理消息的業務邏輯保持冪等性

    保證每條消息都有唯一編號且保證消息處理成功與去重表的日志同時出現

3.有序性

    Producer對于需要順序的消息發送到同一個queue中

    Consumer使用MessageListenerOrderly來對消息進行有序消費

4. 如何實現分布式事務

    發送方向 MQ 服務端發送消息。

    MQ Server 將消息持久化成功之后,向發送方 ACK 確認消息已經發送成功,此時消息為半消息。

    發送方開始執行本地事務邏輯。

    發送方根據本地事務執行結果向 MQ Server 提交二次確認(Commit 或是 Rollback),MQ Server 收到 Commit 狀態則將半消息標記為可投遞,訂閱方最終將收到該消息;MQ Server 收到 Rollback 狀態則刪除半 消息,訂閱方將不會接受該消息。

    在斷網或者是應用重啟的特殊情況下,上述步驟4提交的二次確認最終未到達 MQ Server,經過固定時間后 MQ Server 將對該消息發起消息回查。

    發送方收到消息回查后,需要檢查對應消息的本地事務執行的最終結果。

    發送方根據檢查得到的本地事務的最終狀態再次提交二次確認,MQ Server 仍按照步驟4對半消息進行操作。

5.push和pull模式

    push模式:客戶端與服務端建立連接后,當服務端有消息時,將消息推送到客戶端。

    pull模式:客戶端不斷的輪詢請求服務端,來獲取新的消息。

    但在具體實現時,Push和Pull模式都是采用消費端主動拉取的方式,即consumer輪詢從broker拉取消息。

6. pull方式實現,RocketMQ如何保證消息的實時性呢?

長輪詢即是在請求的過程中,若是服務器端數據并沒有更新,那么則將這個連接掛起,直到服務器推送新的 數據,再返回,然后進入循環周期。 客戶端像傳統輪詢一樣從服務端請求數據,服務端會阻塞請求不會立刻返回,直到有數據或超時才返回給客 戶端,然后關閉連接,客戶端處理完響應信息后再向服務器發送新的請求。

7. 消息模式

DefaultMQPushConsumer實現了自動保存offset值以及實現多個consumer的負載均衡。

//設置組名
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("HAOKE_IM")

通過groupname將多個consumer組合在一起,那么就會存在一個問題,消息發送到這個組后,消息怎么分配呢? 這個時候,就需要指定消息模式,分別有集群和廣播模式。

集群模式
同一個 ConsumerGroup(GroupName相同) 里的每 個 Consumer 只消費所訂閱消息的一部分內容, 同 一個 ConsumerGroup 里所有的 Consumer消費的內容合起來才是所訂閱 Topic 內容的整體, 從而達到 負載均衡的目的 。

廣播模式
同一個 ConsumerGroup里的每個 Consumer都 能消費到所訂閱 Topic 的全部消息,也就是一個消息會 被多次分發,被多個 Consumer消費。

// 集群模式
consumer.setMessageModel(MessageModel.CLUSTERING);
// 廣播模式
consumer.setMessageModel(MessageModel.BROADCASTING);
8. 存儲機制 8.1 消息數據的存儲

在RocketMQ中,消息數據是保存在磁盤文件中,為了保證寫入的性能,RocketMQ盡可能保證順序寫入,順序寫入的效率比隨機寫入的效率高很多。
RocketMQ消息的存儲是由ConsumeQueue和CommitLog配合完成的,CommitLog是真正存儲數據的文件, ConsumeQueue是索引文件,存儲數據指向到物理文件的配置。

8.2 同步刷盤與異步刷盤

同步刷盤
在返回寫成功狀態時,消息已經被寫入磁盤 。 具體流程是:消息寫入內存的 PAGECACHE 后,立刻通知刷盤線程刷盤,然后等待刷盤完成,刷盤線程 執行完成后喚醒等待的線程,返回消息寫成功的狀態 。

異步刷盤
在返回寫成功狀態時,消息可能只是被寫入了內存的 PAGECACHE,寫操作的返回快,吞吐量大 當內存里的消息量積累到一定程度時,統一觸發寫磁盤動作,快速寫入。

broker配置文件中指定刷盤方式
flushDiskType=ASYNC_FLUSH -- 異步
flushDiskType=SYNC_FLUSH -- 同步

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/7102.html

相關文章

  • Java面試消息隊列

    摘要:將消息持久化成功之后,向發送方確認消息已經發送成功,此時消息為半消息。發送方收到消息回查后,需要檢查對應消息的本地事務執行的最終結果。發送方根據檢查得到的本地事務的最終狀態再次提交二次確認,仍按照步驟對半消息進行操作。1.應用場景 解耦 異步 流量消峰 日志記錄 2.重復消息的解決方案 消費端處理消息的業務邏輯保持冪等性 保證每條消息都有唯一編號且保證消息處理成功與去重表的日志同時出現...

    番茄西紅柿 評論0 收藏0
  • Java面試消息隊列

    摘要:將消息持久化成功之后,向發送方確認消息已經發送成功,此時消息為半消息。發送方收到消息回查后,需要檢查對應消息的本地事務執行的最終結果。發送方根據檢查得到的本地事務的最終狀態再次提交二次確認,仍按照步驟對半消息進行操作。1.應用場景 解耦 異步 流量消峰 日志記錄 2.重復消息的解決方案 消費端處理消息的業務邏輯保持冪等性 保證每條消息都有唯一編號且保證消息處理成功與去重表的日志同時出現...

    stormgens 評論0 收藏0
  • 后端必備——數據通信知識(RPC、消息隊列)一站式總結

    摘要:具體可以參考消息隊列之具體可以參考實戰之快速入門十分鐘入門阿里中間件團隊博客是一個分布式的可分區的可復制的基于發布訂閱的消息系統主要用于大數據領域當然在分布式系統中也有應用。目前市面上流行的消息隊列就是阿里借鑒的原理用開發而得。 我自己總結的Java學習的系統知識點以及面試問題,目前已經開源,會一直完善下去,歡迎建議和指導歡迎Star: https://github.com/Snail...

    Kahn 評論0 收藏0
  • 面試精選】關于大型網站系統架構你不得不懂的10個問題

    摘要:降級往往會指定不同的級別,面臨不同的異常等級執行不同的處理。談談你對和的認識兩者關系具體可以看公眾號阿里巴巴中間件的這篇文章獨家解讀從微服務框架到微服務生態與并不是競爭關系,作為成熟的框架,其易用性擴展性和健壯性已得到業界的認可。 該文已加入筆主的開源項目——JavaGuide(一份涵蓋大部分Java程序員所需要掌握的核心知識的文檔類項目),地址:https://github.com/...

    leiyi 評論0 收藏0
  • 面試精選】關于大型網站系統架構你不得不懂的10個問題

    摘要:降級往往會指定不同的級別,面臨不同的異常等級執行不同的處理。談談你對和的認識兩者關系具體可以看公眾號阿里巴巴中間件的這篇文章獨家解讀從微服務框架到微服務生態與并不是競爭關系,作為成熟的框架,其易用性擴展性和健壯性已得到業界的認可。 該文已加入筆主的開源項目——JavaGuide(一份涵蓋大部分Java程序員所需要掌握的核心知識的文檔類項目),地址:https://github.com/...

    luqiuwen 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<