2017-02-04 21 views
0

私はカフェカプロデューサーとコンシューマーを1つのプロジェクトで作っています。一般的なスプリングカフカリスナー

私は別のmavenプロジェクトでそれを使いたいので、上記のkafkaプロジェクトの依存関係を追加しました。今問題はプロデューサですが、このプロジェクトを追加する他のすべてのプロジェクトによってオーバーライドできるリスナジェネリックを作成する方法です。

は現在、私は1つのプロジェクトでリスナーを持っている

public class Listener { 
    public CountDownLatch countDownLatch0 = new CountDownLatch(3); 
    public CountDownLatch countDownLatch1 = new CountDownLatch(3); 
    public CountDownLatch countDownLatch2 = new CountDownLatch(3); 

    @KafkaListener(id = "id0", topicPartitions = { @TopicPartition(topic = "SpringKafkaTopic1", partitions = { "0" }) }) 
    public void listenPartition0(ConsumerRecord<?, ?> record) { 
     System.out.println("Listener Id0, Thread ID: " + Thread.currentThread().getId()); 
     System.out.println("Received: " + record); 
     countDownLatch0.countDown(); 
    } 

    @KafkaListener(id = "id1", topicPartitions = { @TopicPartition(topic = "SpringKafkaTopic1", partitions = { "1" }) }) 
    public void listenPartition1(ConsumerRecord<?, ?> record) { 
     System.out.println("Listener Id1, Thread ID: " + Thread.currentThread().getId()); 
     System.out.println("Received: " + record); 
     countDownLatch1.countDown(); 
    } 

    @KafkaListener(id = "id2", topicPartitions = { @TopicPartition(topic = "SpringKafkaTopic1", partitions = { "2" }) }) 
    public void listenPartition2(ConsumerRecord<?, ?> record) { 
     System.out.println("Listener Id2, Thread ID: " + Thread.currentThread().getId()); 
     System.out.println("Received: " + record); 
     countDownLatch2.countDown(); 
    } 

私はすべての依存関係としてこのプロジェクトを追加し、それぞれの話題を聞くことができる他のすべてのプロジェクトで上書きすることができ、一般的なリスナーを作るにはどうすればよい

答えて

0

私は正しくあなたの質問を理解していた場合、私はあなたがこのような何か行う必要があると思う:共有.jarで

を...

public abstract class Listener { 
    public CountDownLatch countDownLatch0 = new CountDownLatch(3); 
    public CountDownLatch countDownLatch1 = new CountDownLatch(3); 
    public CountDownLatch countDownLatch2 = new CountDownLatch(3); 


    abstract void handlePartition0(record); 
    abstract void handlePartition1(record); 
    abstract void handlePartition2(record); 

    @KafkaListener(id = "id0", topicPartitions = { @TopicPartition(topic = "SpringKafkaTopic1", partitions = { "0" }) }) 
    public void listenPartition0(ConsumerRecord<?, ?> record) { 
    handlePartition0(record); 
    countDownLatch0.countDown(); 
    } 

    @KafkaListener(id = "id1", topicPartitions = { @TopicPartition(topic = "SpringKafkaTopic1", partitions = { "1" }) }) 
    public void listenPartition1(ConsumerRecord<?, ?> record) { 
    handlePartition1(record); 
    countDownLatch1.countDown(); 
    } 

    @KafkaListener(id = "id2", topicPartitions = { @TopicPartition(topic = "SpringKafkaTopic1", partitions = { "2" }) }) 
    public void listenPartition2(ConsumerRecord<?, ?> record) { 
    handlePartition2(record); 
    countDownLatch2.countDown(); 
    } 
} 

次に、子プロジェクトで、共有.jarをインポートしてhandleXXXメソッドをインポートします。

public class MyChildListener extends Listener { 
    public void handlePartition0(Record<?,?> r) { 
    // do something useful 
    } 
    ... 
} 

これはうまくいく可能性があります。

+0

ありがとう、これは私が探していたものです。 – user1201239