Stream 分組消費與持久化

2021-10-24 23:38:51 字數 604 閱讀 3523

比如在如下場景中,訂單系統我們做集群部署,都會從rabbitmq中獲取訂單資訊,那如果乙個訂單同時被兩個服務獲取到,那麼就會造成資料錯誤,我們得避免這種情況,這時我們就可以使用stream中的訊息分組來解決。

注意在stream中處於同乙個group中的多個消費者是競爭關係,就能夠保證訊息只會被其中乙個應用消費一次。

不同組是可以全面消費的(重複消費),同一組內會傳送競爭關係,只有其中乙個可以消費。

分組:

同乙個組會競爭資源,輪詢。不同組會重複消費。

持久化關於自定義分組

如果8802去掉分組,而8803不去掉,當8802/8803都關閉服務,8801這時候傳送訊息,8802再啟動的時候不會重新獲得未曾獲得的訊息並消費,而8803重啟後會獲得8801之前傳送的訊息並消費。

所以group分組屬性在訊息重複消費和訊息持久化消費 避免訊息丟失是非常重要的屬性

就是預設的分組不會保留未曾獲得的訊息,自定義的分組會保留。

sentinel與nacos持久化

在流量控制那篇文章中,我們在sentinel中配置好a服務對應的限流策略後,如果a服務重啟就會導致sentinel中配置好的策略丟失,所以需要持久化操作。流量控制可以有三種方法配置 一種是在sentinel控制台進行配置 服務重啟則配置的策略丟失 一種是在 中進行編寫控制,還有就是從nacos中讀取...

Python序列化與持久化

資料持久化可以將資料儲存到檔案中,資料庫中。儲存到檔案中可以是普通txt檔案,csv檔案等,資料庫可以是sql資料庫mongodb資料庫等 變數從記憶體中變成可儲存或傳輸的過程稱之為序列化,在python中叫pickling 變數內容從序列化的物件重新讀到記憶體裡稱之為反序列化,即unpicklin...

可持久化陣列與可持久化並查集

可持久化陣列 維護這樣的乙個長度為 n 的陣列,支援如下幾種操作 在某個歷史版本上修改某乙個位置上的值 訪問某個歷史版本上的某一位置的值 此外,每進行一次操作 對於操作2,即為生成乙個完全一樣的版本,不作任何改動 就會生成乙個新的版本。版本編號即為當前操作的編號 從1開始編號,版本0表示初始狀態陣列...