私は春のブートカフカのアプリケーションを持っています。私のブローカーは数日おきにリサイクルされています。古いブローカーは、プロビジョニング解除され、新しいブローカーがプロビジョニングされています。
私はブローカーのために、数時間ごとにチェックしているスケジューラを持っています。私たちは新しいブローカーを持って、我々はすべてのSpringカフカ関連の豆をリロードする必要があると確認するとすぐしたいと思います。私はブローカーの値の変更にトリガーをしたいし、プログラムの自動設定をロード以外KafkaAutoConfigurationと非常によく似ています。
古いブローカーを新しいものと交換されるたびに私はプログラムで自動構成をどのように呼ぶのですか?
以下のような要件音コンフィグサーバ春クラウドで:https://cloud.spring.io/spring-cloud-static/Greenwich.SR2/multi/multi__spring_cloud_config_2.html#_spring_cloud_config_2その持つ@RefreshScope
機能:https://cloud.spring.io /spring-cloud-static/Greenwich.SR2/multi/multi__spring_cloud_context_application_context_services.html#refresh-scope。
だから、あなたはあなた自身の豆を指定し、その注釈でそれらをマークする必要があります。
@Bean
@RefreshScope
public ConsumerFactory<?, ?> kafkaConsumerFactory() {
return new DefaultKafkaConsumerFactory<>(this.properties.buildConsumerProperties());
}
@Bean
@RefreshScope
public ProducerFactory<?, ?> kafkaProducerFactory() {
DefaultKafkaProducerFactory<?, ?> factory = new DefaultKafkaProducerFactory<>(
this.properties.buildProducerProperties());
String transactionIdPrefix = this.properties.getProducer().getTransactionIdPrefix();
if (transactionIdPrefix != null) {
factory.setTransactionIdPrefix(transactionIdPrefix);
}
return factory;
}
これらの2つのBeanは、Apacheカフカブローカーへの接続のための設定プロパティに依存しており、それは彼らがリフレッシュ持っていることは本当に完全に十分です。たびContextRefreshedEvent
起こるこれらの豆は、新鮮な構成プロパティを再初期化しようとしています。
私が考えるConsumerFactory
消費者(MessageListenerContainer
とがKafkaListenerEndpointRegistry
)にもそのイベントに再起動する必要があります。ポイントは、それがあるMessageListenerContainer
長寿プロセスを開始しますので、キャッシュするKafkaConsumer
ためのインスタンスpoll
の目的を。
すべてのProducerFactory
消費者は、再起動する必要はありません。場合でもKafkaProducer
にキャッシュされているDefaultKafkaProducerFactory
ことの間に再初期化されようとしている@RefreshScope
段階。
更新
私は設定のサーバーを使用しないでください。私は領事カタログサービスから新しいホストを取得します。
右、私はあなたがコンフィグServerを使用することを言いませんでした。それはちょうど私のために同じように見えます。だから、大きな高さから、私は本当にあなたの領事カタログソリューションのコンフィグクライアントの実装に見てみます。
それでもあなたはまだ放出することができRefreshEvent
、すべてのトリガする@RefreshScope
「D豆がリロードされます。その目的のためには、実装する必要がありますApplicationEventPublisherAware
し、あなたが領事からの更新を持っていたときにそのイベントを発します。注意:カフカリスナーコンテナを再起動する必要があります。その目的のために、あなたはのために聞くことができRefreshScopeRefreshedEvent
、あなたが本当にすべてのみリスタートに興味があるので、@RefreshScope
リフレッシュされました。
詳細についてはリフレッシュ範囲:https://gist.github.com/dsyer/a43fe5f74427b371519af68c5c4904c7