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

資訊專欄INFORMATION COLUMN

Java面試之消息隊(duì)列

stormgens / 2954人閱讀

摘要:將消息持久化成功之后,向發(fā)送方確認(rèn)消息已經(jīng)發(fā)送成功,此時(shí)消息為半消息。發(fā)送方收到消息回查后,需要檢查對(duì)應(yīng)消息的本地事務(wù)執(zhí)行的最終結(jié)果。發(fā)送方根據(jù)檢查得到的本地事務(wù)的最終狀態(tài)再次提交二次確認(rèn),仍按照步驟對(duì)半消息進(jìn)行操作。

1.應(yīng)用場(chǎng)景

    解耦

    異步

    流量消峰

    日志記錄

2.重復(fù)消息的解決方案

    消費(fèi)端處理消息的業(yè)務(wù)邏輯保持冪等性

    保證每條消息都有唯一編號(hào)且保證消息處理成功與去重表的日志同時(shí)出現(xiàn)

3.有序性

    Producer對(duì)于需要順序的消息發(fā)送到同一個(gè)queue中

    Consumer使用MessageListenerOrderly來(lái)對(duì)消息進(jìn)行有序消費(fèi)

4. 如何實(shí)現(xiàn)分布式事務(wù)

    發(fā)送方向 MQ 服務(wù)端發(fā)送消息。

    MQ Server 將消息持久化成功之后,向發(fā)送方 ACK 確認(rèn)消息已經(jīng)發(fā)送成功,此時(shí)消息為半消息。

    發(fā)送方開始執(zhí)行本地事務(wù)邏輯。

    發(fā)送方根據(jù)本地事務(wù)執(zhí)行結(jié)果向 MQ Server 提交二次確認(rèn)(Commit 或是 Rollback),MQ Server 收到 Commit 狀態(tài)則將半消息標(biāo)記為可投遞,訂閱方最終將收到該消息;MQ Server 收到 Rollback 狀態(tài)則刪除半 消息,訂閱方將不會(huì)接受該消息。

    在斷網(wǎng)或者是應(yīng)用重啟的特殊情況下,上述步驟4提交的二次確認(rèn)最終未到達(dá) MQ Server,經(jīng)過(guò)固定時(shí)間后 MQ Server 將對(duì)該消息發(fā)起消息回查。

    發(fā)送方收到消息回查后,需要檢查對(duì)應(yīng)消息的本地事務(wù)執(zhí)行的最終結(jié)果。

    發(fā)送方根據(jù)檢查得到的本地事務(wù)的最終狀態(tài)再次提交二次確認(rèn),MQ Server 仍按照步驟4對(duì)半消息進(jìn)行操作。

5.push和pull模式

    push模式:客戶端與服務(wù)端建立連接后,當(dāng)服務(wù)端有消息時(shí),將消息推送到客戶端。

    pull模式:客戶端不斷的輪詢請(qǐng)求服務(wù)端,來(lái)獲取新的消息。

    但在具體實(shí)現(xiàn)時(shí),Push和Pull模式都是采用消費(fèi)端主動(dòng)拉取的方式,即consumer輪詢從broker拉取消息。

6. pull方式實(shí)現(xiàn),RocketMQ如何保證消息的實(shí)時(shí)性呢?

長(zhǎng)輪詢即是在請(qǐng)求的過(guò)程中,若是服務(wù)器端數(shù)據(jù)并沒(méi)有更新,那么則將這個(gè)連接掛起,直到服務(wù)器推送新的 數(shù)據(jù),再返回,然后進(jìn)入循環(huán)周期。 客戶端像傳統(tǒng)輪詢一樣從服務(wù)端請(qǐng)求數(shù)據(jù),服務(wù)端會(huì)阻塞請(qǐng)求不會(huì)立刻返回,直到有數(shù)據(jù)或超時(shí)才返回給客 戶端,然后關(guān)閉連接,客戶端處理完響應(yīng)信息后再向服務(wù)器發(fā)送新的請(qǐng)求。

7. 消息模式

DefaultMQPushConsumer實(shí)現(xiàn)了自動(dòng)保存offset值以及實(shí)現(xiàn)多個(gè)consumer的負(fù)載均衡。

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

通過(guò)groupname將多個(gè)consumer組合在一起,那么就會(huì)存在一個(gè)問(wèn)題,消息發(fā)送到這個(gè)組后,消息怎么分配呢? 這個(gè)時(shí)候,就需要指定消息模式,分別有集群和廣播模式。

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

廣播模式
同一個(gè) ConsumerGroup里的每個(gè) Consumer都 能消費(fèi)到所訂閱 Topic 的全部消息,也就是一個(gè)消息會(huì) 被多次分發(fā),被多個(gè) Consumer消費(fèi)。

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

在RocketMQ中,消息數(shù)據(jù)是保存在磁盤文件中,為了保證寫入的性能,RocketMQ盡可能保證順序?qū)懭?,順序?qū)懭氲男时入S機(jī)寫入的效率高很多。
RocketMQ消息的存儲(chǔ)是由ConsumeQueue和CommitLog配合完成的,CommitLog是真正存儲(chǔ)數(shù)據(jù)的文件, ConsumeQueue是索引文件,存儲(chǔ)數(shù)據(jù)指向到物理文件的配置。

8.2 同步刷盤與異步刷盤

同步刷盤
在返回寫成功狀態(tài)時(shí),消息已經(jīng)被寫入磁盤 。 具體流程是:消息寫入內(nèi)存的 PAGECACHE 后,立刻通知刷盤線程刷盤,然后等待刷盤完成,刷盤線程 執(zhí)行完成后喚醒等待的線程,返回消息寫成功的狀態(tài) 。

異步刷盤
在返回寫成功狀態(tài)時(shí),消息可能只是被寫入了內(nèi)存的 PAGECACHE,寫操作的返回快,吞吐量大 當(dāng)內(nèi)存里的消息量積累到一定程度時(shí),統(tǒng)一觸發(fā)寫磁盤動(dòng)作,快速寫入。

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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/6786.html

相關(guān)文章

  • Java面試消息隊(duì)列

    摘要:將消息持久化成功之后,向發(fā)送方確認(rèn)消息已經(jīng)發(fā)送成功,此時(shí)消息為半消息。發(fā)送方收到消息回查后,需要檢查對(duì)應(yīng)消息的本地事務(wù)執(zhí)行的最終結(jié)果。發(fā)送方根據(jù)檢查得到的本地事務(wù)的最終狀態(tài)再次提交二次確認(rèn),仍按照步驟對(duì)半消息進(jìn)行操作。1.應(yīng)用場(chǎng)景 解耦 異步 流量消峰 日志記錄 2.重復(fù)消息的解決方案 消費(fèi)端處理消息的業(yè)務(wù)邏輯保持冪等性 保證每條消息都有唯一編號(hào)且保證消息處理成功與去重表的日志同時(shí)出現(xiàn)...

    番茄西紅柿 評(píng)論0 收藏0
  • Java面試消息隊(duì)列

    摘要:將消息持久化成功之后,向發(fā)送方確認(rèn)消息已經(jīng)發(fā)送成功,此時(shí)消息為半消息。發(fā)送方收到消息回查后,需要檢查對(duì)應(yīng)消息的本地事務(wù)執(zhí)行的最終結(jié)果。發(fā)送方根據(jù)檢查得到的本地事務(wù)的最終狀態(tài)再次提交二次確認(rèn),仍按照步驟對(duì)半消息進(jìn)行操作。1.應(yīng)用場(chǎng)景 解耦 異步 流量消峰 日志記錄 2.重復(fù)消息的解決方案 消費(fèi)端處理消息的業(yè)務(wù)邏輯保持冪等性 保證每條消息都有唯一編號(hào)且保證消息處理成功與去重表的日志同時(shí)出現(xiàn)...

    番茄西紅柿 評(píng)論0 收藏0
  • 后端必備——數(shù)據(jù)通信知識(shí)(RPC、消息隊(duì)列)一站式總結(jié)

    摘要:具體可以參考消息隊(duì)列之具體可以參考實(shí)戰(zhàn)之快速入門十分鐘入門阿里中間件團(tuán)隊(duì)博客是一個(gè)分布式的可分區(qū)的可復(fù)制的基于發(fā)布訂閱的消息系統(tǒng)主要用于大數(shù)據(jù)領(lǐng)域當(dāng)然在分布式系統(tǒng)中也有應(yīng)用。目前市面上流行的消息隊(duì)列就是阿里借鑒的原理用開發(fā)而得。 我自己總結(jié)的Java學(xué)習(xí)的系統(tǒng)知識(shí)點(diǎn)以及面試問(wèn)題,目前已經(jīng)開源,會(huì)一直完善下去,歡迎建議和指導(dǎo)歡迎Star: https://github.com/Snail...

    Kahn 評(píng)論0 收藏0
  • 面試精選】關(guān)于大型網(wǎng)站系統(tǒng)架構(gòu)你不得不懂的10個(gè)問(wèn)題

    摘要:降級(jí)往往會(huì)指定不同的級(jí)別,面臨不同的異常等級(jí)執(zhí)行不同的處理。談?wù)勀銓?duì)和的認(rèn)識(shí)兩者關(guān)系具體可以看公眾號(hào)阿里巴巴中間件的這篇文章獨(dú)家解讀從微服務(wù)框架到微服務(wù)生態(tài)與并不是競(jìng)爭(zhēng)關(guān)系,作為成熟的框架,其易用性擴(kuò)展性和健壯性已得到業(yè)界的認(rèn)可。 該文已加入筆主的開源項(xiàng)目——JavaGuide(一份涵蓋大部分Java程序員所需要掌握的核心知識(shí)的文檔類項(xiàng)目),地址:https://github.com/...

    leiyi 評(píng)論0 收藏0
  • 面試精選】關(guān)于大型網(wǎng)站系統(tǒng)架構(gòu)你不得不懂的10個(gè)問(wèn)題

    摘要:降級(jí)往往會(huì)指定不同的級(jí)別,面臨不同的異常等級(jí)執(zhí)行不同的處理。談?wù)勀銓?duì)和的認(rèn)識(shí)兩者關(guān)系具體可以看公眾號(hào)阿里巴巴中間件的這篇文章獨(dú)家解讀從微服務(wù)框架到微服務(wù)生態(tài)與并不是競(jìng)爭(zhēng)關(guān)系,作為成熟的框架,其易用性擴(kuò)展性和健壯性已得到業(yè)界的認(rèn)可。 該文已加入筆主的開源項(xiàng)目——JavaGuide(一份涵蓋大部分Java程序員所需要掌握的核心知識(shí)的文檔類項(xiàng)目),地址:https://github.com/...

    luqiuwen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<