SpringBoot-Kafka应用程序可以兼顾消费者和制作人

时间:2018-02-15 16:23:18

标签: spring-boot apache-kafka

在这个应用程序中,我们正在使用消息处理它然后再将其转发给其他消费者,所以任何人都可以分享一种可行的方法来做到这一点, 如果你能分享一些例子,它会很棒。

1 个答案:

答案 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);
  }
}