2017-10-18 6 views
0

Ich möchte asynchron in Spring Cloud Kafka Stream schreiben. Zum BeispielAsynchron zu Frühlingswolke Kafka Stream schreiben

Class SomeClass{ 

@StreamLister(Processor.INPUT) 
public void receiveEvents(String e){ 

    class ThreadExecutor implements Runnable { 
    private String message; 

    public ThreadExecutor(message){ 
     this.message = message; 
    } 

    public void run(){ 
     //after processing the string I will publish it 
     message = message + "done"; 
     writeToStream(message); 
    } 
    } 

    Executors.newCachedThreadPool().execute(new ThreadExecutor(e)); 
} 

@SendTo //not sure how to write it back 
public Message<String> writeToStream(String message){ 
    //this is what I want to know 
    } 

} 

Also im obigen Beispiel. Ich möchte wissen, wie man die writeToStream-Methode aufruft, so dass sie zurück in kafka schreibt. Im Grunde möchte ich schreiben, um bei der Erfüllung der Aufgabe zu streamen, im Gegensatz zum Polling. Bitte helfen Sie.

Antwort

0
@Autowired 
private MessageChannel output; 

... 

    output.send(MessageBuilder.withPayload(data).build()); 

Es ist jedoch nicht klar, warum Sie das brauchen; Die Kafka-Sends sind standardmäßig bereits asynchron.

+0

Danke Gary. Ich habe es so gelöst. Ich kann meine Frage nicht beantworten. Ich bin blockiert, um die Frage zu beantworten. Will Stream-Listener erstellen Threads für jede Nachricht, die es empfängt. In meinem Fall wurden nur Nachrichten empfangen, nachdem die Ausgabe zurückgegeben wurde. Also habe ich einen Thread erstellt, um ihn asynchron zu senden. –

+0

Warum müssen Sie eine weitere Antwort hinzufügen, wenn diese Ihre Frage beantwortet? Sie können die "Nebenläufigkeit" in der Sammelmappe erhöhen, um mehrere gleichzeitige Lieferungen zu erhalten. Sie müssen mindestens diese Anzahl von Partitionen haben; Kafka wird die Partitionen über die Threads verteilen. Nachrichten derselben Partition werden im selben Thread zugestellt. –

Verwandte Themen