2017-07-20 9 views
0

私はspring-cloud-stream-kafkaを使用して、小さなストレステストを作成しています。このテストでは、多くのイベントが生成され、特定のカフカトピックに送信されます。春の雲ストリーム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

はい、うまくいきます!ありがとう!完全性を確認するために、オプション 'Option.DEFAULT_PATH_LEAF_TO_NULL'を設定して、jsonPathを設定する必要があることを追加します。そうでなければ、プロパティが存在しなければエラーをスローします。 – Markotron

関連する問題