SpringKafka:如何将一个方法传递给另一个(按设计)永远不会返回的方法?

0md85ypi  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(320)

对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”方法永远不会返回,因为它一直在侦听Kafka主题。
要更改/添加此方法,以便将其作为包/库进行调用,并通过调用应用程序向其传递消息处理方法,正确的语法是什么:

...

import kafkaReceiver;

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

kafkaReceiver.receiveMessage(messageHandler);
ubbxdtey

ubbxdtey1#

它是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());
}

相关问题