对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);
答案 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());
}