Java 如何在制作人之前推出卡夫卡消费者

Java 如何在制作人之前推出卡夫卡消费者,java,spring-boot,apache-kafka,Java,Spring Boot,Apache Kafka,我有一大堆与卡夫卡主题互动的微服务。其中一个微服务应该使用两个整数,然后求和并发送到主题。问题是,我无法配置microservice,以便在生产者之前启动消费者。我的代码如下: @springboot应用程序 公共类加法应用程序{ 公共静态void main(字符串[]args){ ConfigurableApplicationContext上下文=SpringApplication.run(AdderApplication.class,args); AdderConsumer consumer

我有一大堆与卡夫卡主题互动的微服务。其中一个微服务应该使用两个整数,然后求和并发送到主题。问题是,我无法配置microservice,以便在生产者之前启动消费者。我的代码如下:

@springboot应用程序
公共类加法应用程序{
公共静态void main(字符串[]args){
ConfigurableApplicationContext上下文=SpringApplication.run(AdderApplication.class,args);
AdderConsumer consumer=context.getBean(AdderConsumer.class);
AdderProducer producer=context.getBean(AdderProducer.class);
sumTwoIntegers()的生产者;
}
@组件
公共类AdderConsumer扩展控制器{
专用倒计时闩锁=新倒计时闩锁(3);
@KafkaListener(topics=“${kafka.topic.name}”)
public void listenToPartitionWithOffset(@Payload Integer message){
如果(消息!=null){
列表。添加(消息);
isProduce=true;
系统输出打印项次(列表);
}   
}
@组件
公共类加法器控制器扩展{
@自动连线
私人卡夫卡模板卡夫卡模板;
@值(${kafka.topic.name}”)
私有字符串主题名;
public void sumtowintegers(){
//逻辑
}
私有void发送消息(字符串消息){
//逻辑
}
@配置
@使能卡夫卡
公共级卡夫卡康菲{
@值(${kafka.boot.server}”)
私有字符串kafkaServer;
@值(${kafka.consumer.group.id})
私有字符串kafkaGroupId;
@豆子
公共日志errorHandler errorHandler(){
返回新的LoggingErrorHandler();
}
@豆子
公共卡夫卡模板卡夫卡模板(){
返回新的KafkaTemplate(producerConfig());
}
@豆子
公共生产者工厂生产者配置(){
Map config=newhashmap();
config.put(ProducerConfig.BOOTSTRAP\u SERVERS\u config,kafkaServer);
config.put(ProducerConfig.KEY\u SERIALIZER\u CLASS\u config,StringSerializer.CLASS);
config.put(ProducerConfig.VALUE\u SERIALIZER\u CLASS\u config,StringSerializer.CLASS);
返回新的DefaultKafkaProducerFactory(配置);
}
@豆子
公共消费者工厂消费者配置(){
Map config=newhashmap();
config.put(ConsumerConfig.BOOTSTRAP\u SERVERS\u config,kafkaServer);
config.put(ConsumerConfig.GROUP\u ID\u config,kafkaGroupId);
config.put(ConsumerConfig.KEY\u反序列化程序\u CLASS\u config,StringDeserializer.CLASS);
config.put(ConsumerConfig.VALUE\u反序列化器\u CLASS\u config,IntegerDeserializer.CLASS);
返回新的DefaultKafkanConsumerFactory(配置);
}
@豆子
公共KafkaListenerContainerFactory KafkaListenerContainerFactory(){
ConcurrentKafkListenerContainerFactory侦听器=新建ConcurrentKafkListenerContainerFactory();
setConsumerFactory(consumerConfig());
setErrorHandler(errorHandler());
返回侦听器;
}
我调试了代码,它同时调用producer和listener,但是我需要listener先接收两个整数,然后才调用producer方法


我将感谢您的想法。

我找到了这个决定。我为producer实现了计时器,并在应用程序运行时定期调用它。 因此,当它第一次调用而没有数据处理时,它什么也不发布,然后客户使用数据,第二次调用生产者将必要的数据发布到主题


另一种解决方案是从消费者调用生产者方法。

microservice使用Spring从同一主题消费产品,我认为这是不可能的。如果你真的想要“微”,我通常也会将消费者与生产者分开servicesAlso,使用与此相同的主题或逻辑,您通常会使用Kafka流,而不是生产者/消费者API