首頁 系統教程 Linux 探討實現可靠的訊息服務

探討實現可靠的訊息服務

Jan 09, 2024 pm 07:49 PM
linux 紅帽

導讀 分散式事務往往是服務化的痛點,很多場景透過業務避免了分散式事務,但是還是存在一些場景必須依賴分散式事務,下面來講講如何處理分散式事務
一 常用解決方案

解決分散式事務問題的方法有很多種,網路上有很多部落格也提供了各種解決方案。總結起來,一般可以分為以下兩種方式: 1. 兩階段提交(Two-Phase Commit,簡稱2PC):這是常見的分散式事務解決方案。在這種方法中,協調者節點負責協調參與者節點的操作,並確保所有節點在提交或回溯時達成一

剛性分散式事務和兩階段提交是一種實現強一致性的機制。 剛性分散式事務是指在分散式系統中,多個參與者節點執行的一系列操作需要確保原子性,即要麼全部成功,要麼全部失敗。這種機制要求所有參與者節點在事務執行過程中遵循相同的協議,透過協調者節點的指導來實現事務的

柔性分散式事務是一種在分散式系統中處理事務的方法。它採用最大努力提交的策略,即盡最大努力去完成事務的提交,但是也允許部分操作失敗。在柔性分散式事務中,通常會使用TCC(Try-Confirm-Cancel)模式來實現事務的管理。 TCC模式將交易分解為三個階段:嘗試(Try)、確認(Confirm)和取消(

先解決分散式交易前提保障:介面必須冪等性,防止訊息重複傳送對業務影響

二 可靠訊息系統設計(這個感覺不錯比較簡單,就拿來分享下)

探討實現可靠的訊息服務

#如上圖

開始執行 例如:
try{
if(prepare()) { //預傳送階段
doService(); //執行業務邏輯
updateMsgStatus();//更新訊息為確認狀態
}
}

1 預先傳送訊息,try階段,如果預先傳送訊息失敗了,業務還未執行,所以 系統A,B還是一致性的 不需要處理

這一點容易理解

2 預發送訊息成功了,開始執行業務邏輯。執行成功 更新預發送訊息轉態為確認發送。如果 此時業務邏輯執行失敗了,那預發送訊息就不會跟新狀態,此時訊息確認系統就開啟工作,到業務系統1上回查此訊息狀態,此時發現業務執行失敗了,就更新預發送狀態至失敗狀態。

3 如果此時 業務執行成功了訊息也被更新成確認發送了 那就ok 完美。如果訊息更新失敗,還是由訊息確認系統回查轉態 更新此訊息被刪除狀態還是確認發送狀態。

4 訊息者開始消費

1> 例如消費失敗了,此時產生不一致, 訊息恢復系統偵測訊息狀態,重新傳送訊息

2>如果執行業務失敗了,此訊息就不會被確認了,還是由訊息恢復系統偵測訊息狀態,重新傳送訊息

3>如果ask失敗了,還是以上邏輯重新發送上訴重新發送當然有次數限制,不能一直發送,超過最大次數就要進入死信隊列,等待人工幹預了

4> ask成功,訊息也就成功消費了,完美,解決了訊息可靠服務

三 努力提交

這個比較簡單 ,將失敗的訊息重複提交,即時性比較弱的一些場景,確保訊息推送成功。

例如交易完成推播第三方訊息。此時可以使用努力提交

探討實現可靠的訊息服務

# 文章轉載自 開源中國社群 [http://www.oschina.net]

以上是探討實現可靠的訊息服務的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1317
25
PHP教程
1268
29
C# 教程
1246
24
Linux體系結構:揭示5個基本組件 Linux體系結構:揭示5個基本組件 Apr 20, 2025 am 12:04 AM

Linux系統的五個基本組件是:1.內核,2.系統庫,3.系統實用程序,4.圖形用戶界面,5.應用程序。內核管理硬件資源,系統庫提供預編譯函數,系統實用程序用於系統管理,GUI提供可視化交互,應用程序利用這些組件實現功能。

git怎麼查看倉庫地址 git怎麼查看倉庫地址 Apr 17, 2025 pm 01:54 PM

要查看 Git 倉庫地址,請執行以下步驟:1. 打開命令行並導航到倉庫目錄;2. 運行 "git remote -v" 命令;3. 查看輸出中的倉庫名稱及其相應的地址。

vscode上一步下一步快捷鍵 vscode上一步下一步快捷鍵 Apr 15, 2025 pm 10:51 PM

VS Code 一步/下一步快捷鍵的使用方法:一步(向後):Windows/Linux:Ctrl ←;macOS:Cmd ←下一步(向前):Windows/Linux:Ctrl →;macOS:Cmd →

notepad怎麼運行java代碼 notepad怎麼運行java代碼 Apr 16, 2025 pm 07:39 PM

雖然 Notepad 無法直接運行 Java 代碼,但可以通過借助其他工具實現:使用命令行編譯器 (javac) 編譯代碼,生成字節碼文件 (filename.class)。使用 Java 解釋器 (java) 解釋字節碼,執行代碼並輸出結果。

sublime寫好代碼後如何運行 sublime寫好代碼後如何運行 Apr 16, 2025 am 08:51 AM

在 Sublime 中運行代碼的方法有六種:通過熱鍵、菜單、構建系統、命令行、設置默認構建系統和自定義構建命令,並可通過右鍵單擊項目/文件運行單個文件/項目,構建系統可用性取決於 Sublime Text 的安裝情況。

Linux的主要目的是什麼? Linux的主要目的是什麼? Apr 16, 2025 am 12:19 AM

Linux的主要用途包括:1.服務器操作系統,2.嵌入式系統,3.桌面操作系統,4.開發和測試環境。 Linux在這些領域表現出色,提供了穩定性、安全性和高效的開發工具。

git軟件安裝 git軟件安裝 Apr 17, 2025 am 11:57 AM

安裝 Git 軟件包括以下步驟:下載安裝包運行安裝包驗證安裝配置 Git安裝 Git Bash(僅限 Windows)

laravel安裝代碼 laravel安裝代碼 Apr 18, 2025 pm 12:30 PM

要安裝 Laravel,需依序進行以下步驟:安裝 Composer(適用於 macOS/Linux 和 Windows)安裝 Laravel 安裝器創建新項目啟動服務訪問應用程序(網址:http://127.0.0.1:8000)設置數據庫連接(如果需要)

See all articles