Ich benutze spring-cloud-stream-kafka, um einen kleinen Stresstest zu schreiben, der viele Ereignisse erzeugt und sie an ein bestimmtes Kafka-Thema sendet.Spring cloud stream partitionKeyExpression SpEL
Das Thema hat 6 Partitionen und ich möchte eine Benutzer-ID als Partitionierungsschlüssel verwenden. Da die Benutzer-ID jedoch nicht immer vorhanden ist, möchte ich, dass die Logik wie folgt aussieht: Partitionierung nach Benutzer-ID, falls sie vorhanden ist, andernfalls wird sie an eine zufällige Partition gesendet.
Gibt es eine Möglichkeit, die
spring.cloud.stream.bindings.output.producer.partitionKeyExpression
Eigenschaft verwenden gewünschtes Verhalten zu erreichen?
P.S. Ich war in der Lage, eine Extraktorklasse zu erstellen, die das tut, aber ich frage mich, ob es eine Möglichkeit gibt, das mit Spel zu erreichen.
Danke, Marko
Nein, dies funktioniert nicht, da die userId nicht als Eigenschaft in einem Payload-JSON existiert. Ich denke, das würde funktionieren, wenn ich das Ereignis immer die Eigenschaft userId enthalten würde, aber manchmal ist die Eigenschaft _null_. Etwas wie _userId: null_. – Markotron
Wenn es json ist, können Sie #jsonpath in Ihrem elvis-Ausdruck verwenden. –
Ja, das funktioniert! Vielen Dank! Der Vollständigkeit halber werde ich nur hinzufügen, dass Sie jsonPath konfigurieren müssen, indem Sie die Option 'Option.DEFAULT_PATH_LEAF_TO_NULL' setzen, andernfalls wird ein Fehler ausgegeben, wenn die Eigenschaft nicht existiert! – Markotron