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