在这个应用程序中,我们正在使用消息处理它然后再将其转发给其他消费者,所以任何人都可以分享一种可行的方法来做到这一点, 如果你能分享一些例子,它会很棒。
答案 0 :(得分:1)
Spring Kafka项目只有@SendTo
注释用于此目的,这使得您的消费者也可以生成消息read docs
或者,您可以使用单个消费者接收来自firstTopic
的消息,并在其中添加kafkaTemplate
因此,在处理之后,它将向secondTopic
发送消息。下面是一个简单的例子,它只包含一个生产者和一个消费者。
有关配置类的完整示例引用(仅适用于基本生产者 - 消费者示例),请参阅here
生产者
package com.codenotfound.kafka.producer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
public class Sender {
private static final Logger LOGGER =
LoggerFactory.getLogger(Sender.class);
@Autowired
private KafkaTemplate<String, String> kafkaTemplate;
public void send(String topic, String payload) {
LOGGER.info("sending payload='{}' to topic='{}'", payload, topic);
kafkaTemplate.send("firstTopic", payload);
}
}
消费
package com.codenotfound.kafka.consumer;
import java.util.concurrent.CountDownLatch;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.kafka.annotation.KafkaListener;
public class Receiver {
@Autowired
private KafkaTemplate<String, String> kafkaTemplate;
private static final Logger LOGGER =
LoggerFactory.getLogger(Receiver.class);
@KafkaListener(topics = "firstTopic")
public void receive(String payload) {
LOGGER.info("received payload='{}'", payload);
//To do processing and get generate payload
String payload2 = someprocessingLogic(payload);
kafkaTemplate.send("secondTopic", payload);
}
}