1

Javaのまったく新しい。

次の Kafka リスナー メソッドを持つ spring-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);
4

1 に答える 1

1

ジャバです。そのような概念はありません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());
}
于 2016-11-03T14:17:33.990 に答える