2017-02-02 5 views
1

spring-kafkaを使用する春の起動アプリケーションがあります。 configプロパティを更新するときに、kafkaプロデューサ(kafkatemplate)を無効にしたいとします。私は条件付きのBeanを試して、applicationcontext refreshを使っています。実行時にスプリングカフカプロデューサを正常にシャットダウンします

spring-kafkaでkafkaproducerを正常にシャットダウンする方法はありますか?

答えて

0

DefaultKafkaProducerFactorydestroy()を呼び出して(シングルトン)プロデューサを閉じることができますが、次にコードがcreateProducer()を呼び出すと別のものが作成されます。現在、それを防ぐ方法はありません。ファクトリをサブクラス化し、プロデューサを作成したくない場合は例外をスローする必要があります。

+0

こんにちはゲイリー - 私たちの必要性のために働くだろう。 destroy()が呼び出された後、メッセージが送信されたとき(createProducerの呼び出しを試みた) - 次のエラーが発生します。java.lang.IllegalStateException:プロデューサが閉じられた後に送信できません。 \t at org.apache.kafka.clients.producer.internals.RecordAccumulator.append(RecordAccumulator.java:172)〜[kafka-clients-0.10.1.1.jar:na] \t at org.apache.kafka.clients。 producer.KafkaProducer.doSend(KafkaProducer.java:474)〜[kafka-clients-0.10.1.1.jar:na] \t at org.apache.kafka.clients.producer.KafkaProducer.send(KafkaProducer.java:436)〜 [kafka-clients-0.10.1.1.jar:na] – basu76

+0

ここにコメントのようなものを入れないでください。それはうまくいかない。あなたの質問を編集し、あなたがそうしたと言ってコメントを追加する方が良いです。完全なスタックトレースを表示する必要がありますが、 'KafkaTemplate'キャッシュがプロデューサを参照しています。それは間違っている;毎回工場からプロデューサーを取り出す必要があります。私は[問題](https://github.com/spring-projects/spring-kafka/issues/232)を開いた。回避策として、新しい「KafkaTemplate」を作成して工場から新しいプロデューサを取得する必要があります。 –

関連する問題