どのようにプログラムで自動設定しますか?

user2683814:

私は春のブートカフカのアプリケーションを持っています。私のブローカーは数日おきにリサイクルされています。古いブローカーは、プロビジョニング解除され、新しいブローカーがプロビジョニングされています。

私はブローカーのために、数時間ごとにチェックしているスケジューラを持っています。私たちは新しいブローカーを持って、我々はすべての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

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=226045&siteId=1