Class Level @SendTo
Selection Criteria
If @SendTo is present on valid class with class-level @KafkaListener or @KafkaListeners, and non-void @KafkaHandler is present on one of its methods
java
@KafkaListener(topics = {"messages.blue"})
@KafkaListener(topics = {"messages.green"})
@SendTo({"messages.*.replies", "messages.*.replies-2"})
public class MultiMessagesListener {
@KafkaHandler
public String listen(Object message) {}
}Registration process
When listener is registered with @SendTo annotation, one-to-many operation will be created for each @KafkaHandler method.
java
@KafkaListener(topics = {"messages.blue"})
@KafkaListener(topics = {"messages.green", "messages.yellow"}, groupId = "group-id")
@SendTo({"messages.replies.1", "messages.replies.2"})
public class MultiMessagesListener {
@KafkaHandler
public String listen(Object message) {}
}The next operations will be created:
- receive
Objectfrommessages.blueand reply tomessages.replies.1withString - receive
Objectfrommessages.blueand reply tomessages.replies.2withString - receive
Objectfrommessages.greenwith groupIdgroup-idand reply tomessages.replies.1withString - receive
Objectfrommessages.greenwith groupIdgroup-idand reply tomessages.replies.2withString - receive
Objectfrommessages.yellowwith groupIdgroup-idand reply tomessages.replies.1withString - receive
Objectfrommessages.yellowwith groupIdgroup-idand reply tomessages.replies.2withString
When @SendTo will be ignored?
Empty @SendTo
When @SendTo annotation is empty
java
@KafkaListener(topics = {"messages.blue"})
@KafkaListener(topics = {"messages.green"})
@SendTo
public class MultiMessagesListener {
@KafkaHandler
public String listen(Object message) {}
}Only void @KafkaHandler
When all @KafkaHandler methods are void
java
@KafkaListener(topics = {"messages.blue"})
@KafkaListener(topics = {"messages.green"})
@SendTo({"messages.*.replies", "messages.*.replies-2"})
public class MultiMessagesListener {
@KafkaHandler
public void listen(Object message) {}
}