@SentTo如何将消息发送到相关主题?

时间:2019-06-01 00:12:25

标签: apache-kafka kafka-consumer-api kafka-producer-api spring-kafka

我在我的Rest控制器中使用ReplyingKafkaTemplate返回同步响应。我还要设置标题REPLY_TOPIC。对于侦听器微服务部分,


 @KafkaListener(topics = "${kafka.topic.request-topic}")
 @SendTo
 public Model listen(Model<SumModel,SumResp> request) throws InterruptedException {

   SumModel model = request.getRequest();
   int sum = model.getNumber1() + model.getNumber2();

   SumResp resp = new SumResp(sum);
   request.setReply(resp);

   request.setAdditionalProperty("sum", sum);
   return request;
 }

我的问题是,@sentTo批注如何将消息发布到标题中提供的主题。应该有一个KafkaTemplate bean还是不需要它?由于我们只是在不使用任何KafkaTemplate或ReplyingKafkaTemplate bean的情况下返回消息。

没有任何kafka模板,它可以工作还是需要KafkaTemplate或ReplyingKafkaTemplate bean?

谢谢

1 个答案:

答案 0 :(得分:0)

是的,使用模板发送回复...

Assert.state(replyTopic == null || this.replyTemplate != null,
        "a KafkaTemplate is required to support replies");

如果应用程序上下文中只有一个模板,Spring Boot会自动将模板连接到侦听器容器工厂。

map.from(this.replyTemplate).to(factory::setReplyTemplate);

如果上下文中还没有模板,启动也会自动配置模板。