Java 如何在Spring MVC web应用程序中实现Kafka使用者(使用Spring Boot)

Java 如何在Spring MVC web应用程序中实现Kafka使用者(使用Spring Boot),java,spring,model-view-controller,spring-boot,apache-kafka,Java,Spring,Model View Controller,Spring Boot,Apache Kafka,我想在Spring MVC web应用程序中创建一个消费者。基本上,我希望web应用程序能够收听一些关于卡夫卡的主题,并根据收到的消息采取一些行动 到目前为止,我看到的所有示例都是使用带有无限循环的独立应用程序(使用普通java)或单元测试(使用spring): } @Autowired private Listener listener; @Autowired private KafkaTemplate<Integer, String> template; @Test publ

我想在Spring MVC web应用程序中创建一个消费者。基本上,我希望web应用程序能够收听一些关于卡夫卡的主题,并根据收到的消息采取一些行动

到目前为止,我看到的所有示例都是使用带有无限循环的独立应用程序(使用普通java)或单元测试(使用spring):

}

@Autowired
private Listener listener;

@Autowired
private KafkaTemplate<Integer, String> template;

@Test
public void testSimple() throws Exception {
    template.send("annotated1", 0, "foo");
    template.flush();
    assertTrue(this.listener.latch1.await(10, TimeUnit.SECONDS));
}

@Configuration
@EnableKafka
public class Config {

@Bean
ConcurrentKafkaListenerContainerFactory<Integer, String>
                    kafkaListenerContainerFactory() {
    ConcurrentKafkaListenerContainerFactory<Integer, String> factory =
                            new ConcurrentKafkaListenerContainerFactory<>();
    factory.setConsumerFactory(consumerFactory());
    return factory;
}

@Bean
public ConsumerFactory<Integer, String> consumerFactory() {
    return new DefaultKafkaConsumerFactory<>(consumerConfigs());
}

@Bean
public Map<String, Object> consumerConfigs() {
    Map<String, Object> props = new HashMap<>();
    props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, embeddedKafka.getBrokersAsString());
    ...
    return props;
}

@Bean
public Listener listener() {
    return new Listener();
}

@Bean
public ProducerFactory<Integer, String> producerFactory() {
    return new DefaultKafkaProducerFactory<>(producerConfigs());
}

@Bean
public Map<String, Object> producerConfigs() {
    Map<String, Object> props = new HashMap<>();
    props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, embeddedKafka.getBrokersAsString());
    ...
    return props;
}

@Bean
public KafkaTemplate<Integer, String> kafkaTemplate() {
    return new KafkaTemplate<Integer, String>(producerFactory());
}

}
public class Listener {

    private final CountDownLatch latch1 = new CountDownLatch(1);

    @KafkaListener(id = "foo", topics = "annotated1")
        public void listen1(String foo) {
            this.latch1.countDown();
     }

}
@SpringBootApplication
public class Application {

@Autowired
private Listener listener;

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }