2016-11-03 3 views
1

全く新しいjavaです。spring-kafka:メソッドを別のメソッドに渡すにはどうすればいいですか?

次カフカリスナーメソッドを持って、ばねカフカアプリ、書き込み:私は独立したスタンドアロンパッケージなので、「receiveMessageにアプリのこの部分をリファクタリングするように求めてきた

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

を"を呼び出すことができ、" handleMessage "の代わりにメソッド/関数を渡して各受信メッセージを処理することができます。

この "receiveMessage"メソッドは、カフカトピックをリッスンし続けるため、返されません。

... 

import kafkaReceiver; 

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

kafkaReceiver.receiveMessage(messageHandler); 
:それはパッケージ/ライブラリとして呼ばれることができ、および方法を扱うメッセージは、呼び出し元のアプリケーションによってそれに渡されるので、この方法で追加/変更するには、適切な構文になり何

答えて

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()); 
} 
関連する問題