spring-kafka:如何将一个方法传递给另一个方法,(按设计)从不 returns?

spring-kafka: how to pass a method to another method, which (by design) never returns?

对 java 完全陌生。

编写一个 spring-kafka 应用程序,它具有以下 Kafka 侦听器方法:

@KafkaListener(id = "receiver-api",
            topicPartitions =
                    { @TopicPartition(topic = "topic1",
                            partitionOffsets = @PartitionOffset(partition = "0", initialOffset = "0")))})
    public void receiveMessage(String message) {
        try {
            JSONObject incomingJsonObject = new JSONObject(message);

                handleMessage(incomingJsonObject);
            }   

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

我被要求将应用程序的这一部分重构为一个单独的独立程序包,因此可以调用 "receiveMessage",并且可以将方法/函数传递给它,以代替"handleMessage",处理每条传入的消息。

此 "receiveMessage" 方法从未 returns,因为它一直在监听 Kafka 主题。

更改/添加此方法的正确语法是什么,以便它可以作为包/库调用,并且消息处理方法将由调用应用程序传递给它:

...

import kafkaReceiver;

messageHandler(String message){
......
}

kafkaReceiver.receiveMessage(messageHandler);

是Java。没有这个概念method to method。有一些对象,通常称为 services。因此,您可以提取 @KafkaListener 服务并向其中注入适当的服务实现:

public class MyKafkaListener {

    private final MyService myService;

    public MyKafkaListener(MyService myService) {
        this.myService = myService;
    }


    @KafkaListener
    public void receiveMessage(String message) {
            this.myService.handleMessage(message);
    }

}

...

@Bean
public MyKafkaListener myKafkaListener() {
   return new MyKafkaListener(myServiceImpl());
}