2017-07-20 135 views
0

我正在使用spring-cloud-stream-kafka編寫一個小型壓力測試,它會產生大量事件並將它們發送到特定的Kafka主題。Spring雲流partitionKeyExpression SpEL

該主題有6個分區,我想使用用戶ID作爲分區鍵。但是,用戶ID並不總是存在,所以我希望邏輯如下所示:如果存在用戶ID分區,否則發送到隨機分區。

是否有使用

spring.cloud.stream.bindings.output.producer.partitionKeyExpression 

屬性來實現想要的行爲方式?

P.S.我能夠創建一個提取器類,但是我想知道是否有方法通過Spel來實現這一點。

感謝, 馬爾科

回答

0

Elvis Operator

喜歡的東西

payload.userId ?: Math.random() * 6 

+0

不行,這不起作用,因爲userId不作爲有效載荷json中的屬性存在。我認爲這將工作,如果我總是包含屬性userId的事件,但有時該屬性是_null_。類似於_userId:null_。 – Markotron

+0

如果是json,你可以在你的elvis表達式中使用#jsonpath。 –

+0

是的,這工作!謝謝!爲了完整起見,我只是補充說,你需要配置你的jsonPath,設置選項'Option.DEFAULT_PATH_LEAF_TO_NULL',否則會拋出一個錯誤,如果該屬性不存在! – Markotron