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

2023-11-28 15:50 更新

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

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

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

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

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

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

--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的早期版本中,您可以通過(guò)設(shè)置spring.cloud.stream.bindings.output.producer.partitionKeyExtractorClass屬性來(lái)指定org.springframework.cloud.stream.binder.PartitionKeyExtractorStrategy的實(shí)現(xiàn)。從2.0版開(kāi)始,不推薦使用此屬性,并且在將來(lái)的版本中將不再支持該屬性。

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

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)