SpringCloud 配置用于分區(qū)的輸出綁定

2023-11-28 15:50 更新

您可以通過設(shè)置其partitionKeyExpressionpartitionKeyExtractorName屬性及其partitionCount屬性中的一個或僅一個,來配置輸出綁定以發(fā)送分區(qū)數(shù)據(jù)。

例如,以下是有效的典型配置:

spring.cloud.stream.bindings.output.producer.partitionKeyExpression=payload.id
spring.cloud.stream.bindings.output.producer.partitionCount=5

基于該示例配置,通過使用以下邏輯將數(shù)據(jù)發(fā)送到目標分區(qū)。

根據(jù)partitionKeyExpression為發(fā)送到分區(qū)輸出通道的每條消息計算分區(qū)鍵的值。partitionKeyExpression是一個SpEL表達式,該表達式根據(jù)出站消息進行評估以提取分區(qū)鍵。

如果SpEL表達式不足以滿足您的需要,則可以通過提供org.springframework.cloud.stream.binder.PartitionKeyExtractorStrategy的實現(xiàn)并將其配置為bean(通過使用@Bean注釋)來計算分區(qū)鍵值。 。如果在應用程序上下文中有多個org.springframework.cloud.stream.binder.PartitionKeyExtractorStrategy類型的bean,則可以通過使用partitionKeyExtractorName屬性指定其名稱來進一步過濾它,如以下示例所示:

--spring.cloud.stream.bindings.output.producer.partitionKeyExtractorName=customPartitionKeyExtractor
--spring.cloud.stream.bindings.output.producer.partitionCount=5
. . .
@Bean
public CustomPartitionKeyExtractorClass customPartitionKeyExtractor() {
    return new CustomPartitionKeyExtractorClass();
}

 在Spring Cloud Stream的早期版本中,您可以通過設(shè)置spring.cloud.stream.bindings.output.producer.partitionKeyExtractorClass屬性來指定org.springframework.cloud.stream.binder.PartitionKeyExtractorStrategy的實現(xiàn)。從2.0版開始,不推薦使用此屬性,并且在將來的版本中將不再支持該屬性。

一旦計算出消息密鑰,分區(qū)選擇過程就會將目標分區(qū)確定為0partitionCount - 1之間的值。適用于大多數(shù)情況的默認計算基于以下公式:key.hashCode() % partitionCount這可以在綁定上進行自定義,方法是將SpEL表達式設(shè)置為針對'key'進行評估(通過partitionSelectorExpression屬性),也可以將org.springframework.cloud.stream.binder.PartitionSelectorStrategy的實現(xiàn)配置為bean (通過使用@ Bean批注)。PartitionKeyExtractorStrategy類似,當應用程序上下文中有多個這種類型的bean可用時,您可以使用spring.cloud.stream.bindings.output.producer.partitionSelectorName屬性進一步過濾它,如以下示例所示:

--spring.cloud.stream.bindings.output.producer.partitionSelectorName=customPartitionSelector
. . .
@Bean
public CustomPartitionSelectorClass customPartitionSelector() {
    return new CustomPartitionSelectorClass();
}
在Spring Cloud Stream的早期版本中,您可以通過設(shè)置spring.cloud.stream.bindings.output.producer.partitionSelectorClass屬性來指定org.springframework.cloud.stream.binder.PartitionSelectorStrategy的實現(xiàn)。從2.0版開始,不推薦使用此屬性,并且在將來的版本中將不再支持該屬性。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號