1. 程式人生 > 程式設計 >Spring Cloud Stream分割槽分組原理圖解

Spring Cloud Stream分割槽分組原理圖解

訊息分組

通常在生產環境,我們的每個服務都不會以單節點的方式執行在生產環境,當同一個服務啟動多個例項的時候,這些例項都會繫結到同一個訊息通道的目標主題(Topic)上。預設情況下,當生產者發出一條訊息到繫結通道上,這條訊息會產生多個副本被每個消費者例項接收和處理,但是有些業務場景之下,我們希望生產者產生的訊息只被其中一個例項消費,這個時候我們需要為這些消費者設定消費組來實現這樣的功能。

Spring Cloud Stream分割槽分組原理圖解

當把消費者複製一份,發現2個都能收到訊息

Spring Cloud Stream分割槽分組原理圖解

2個消費者都加入同一個消費者

Spring Cloud Stream分割槽分組原理圖解

發現只有一個能收到

Spring Cloud Stream分割槽分組原理圖解

訊息分割槽

有一些場景需要滿足,同一個特徵的資料被同一個例項消費,比如同一個id的感測器監測資料必須被同一

個例項統計計算分析,否則可能無法獲取全部的資料。又比如部分非同步任務,首次請求啟動task,二次
請求取消task,此場景就必須保證兩次請求至同一例項.

Spring Cloud Stream分割槽分組原理圖解

Spring Cloud Stream分割槽分組原理圖解

Spring Cloud Stream分割槽分組原理圖解

Spring Cloud Stream分割槽分組原理圖解

從上面的配置中,我們可以看到增加了這兩個引數:

1. pring.cloud.stream.bindings.output.producer.partitionKeyExpression :通過該引數指定了分割槽鍵的表示式規則,我們可以根據實際的輸出訊息規則來配置SpEL來生成合適的分割槽鍵;

2. spring.cloud.stream.bindings.output.producer.partitionCount :該引數指定了訊息分

區的數量。

到這裡訊息分割槽配置就完成了,我們可以再次啟動這兩個應用,同時消費者啟動多個,但需要注意的是要為消費者指定不同的例項索引號,這樣當同一個訊息被髮給消費組時,我們可以發現只有一個消費例項在接收和處理這些相同的訊息。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。