2017-07-20 140 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