3 votes

Comment produire plusieurs enregistrements à partir de Transformer ?

Donné : Topologie DSL avec KStream::transform . Dans le cadre de Transformer::transform plusieurs messages sont générés à partir du message d'entrée ( KeyValue<String, Message> ).

Je peux probablement revenir KeyValue<String, List<Message>> de l'objet Transformer::transform et appliquer flatMapValues comme le processeur suivant dans la topologie pour compléter la liste. Cependant, je me demande s'il est possible d'utiliser la fonction ProcessorContext::forward pour le même objectif, c'est-à-dire

public KeyValue<String, Message> transform(String key, Message message) {
        Iterable<Message> messages = generateMultipleFromOne(message);
        messages.forEach(m->context.forward(key, m));

        return null;
}

5voto

Dima Svider Points 327

De la javadoc de Transformer.transform(K clé, V valeur) :

Si plus d'un enregistrement de sortie doit être transmis en aval, ProcessorContext.forward(Object, Object) et ProcessorContext.forward(Object, Object, To) peut être utilisé.

Notez que le fait de renvoyer une nouvelle KeyValue est simplement pratique. La même chose peut être obtenue en utilisant ProcessorContext.forward(Object, Object) et renvoyer null.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X