spring-kafka:如何将方法传递给另一个方法,(通过设计)永远不会返回?

时间:2016-11-03 12:56:22

标签: java spring apache-kafka spring-kafka

对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);

1 个答案:

答案 0 :(得分:1)

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