1

で注釈を付け複数のインスタンス上でリフレッシュ/適用します。は私が<strong>極めて重要なクラウドファウンドリ</strong>上に展開し、発見serivce /ロードバランサとして<strong>Netflixのユーレカ</strong>によって公開され、<strong>Spring構成</strong>を使用して<strong>春ブーツ</strong>アプリケーションを、書いて@refreshScope

以下のようにIは、Beanを作成した:

@Component 
@ConfigurationProperties("config") 
@RefreshScope 
@Data 
public class GeneralProperties { 
    private boolean ignoreEvent; 
} 

ユーレカは、構成リポジトリに実際のプロパティを変更した後/refreshで露光することをアプリケーション・ルートに呼び出すとき、@refreshScopeによって注釈値でした変更されました(フィールドが応答している状態で終了します)。これは正常に動作していることを意味します。

クラウド上で同じアプリケーションの複数のインスタンスを実行し、/refreshを呼び出すと、問題が発生します。
使用されるルートはEurekaによって公開されたルートで、ユーザーはロードバランサを使用してコールを使用可能なインスタンスの1つにルーティングします。
予想外の結果は、すべてのインスタンスがプロパティの最新の変更で更新されているわけではありません。

すべてのインスタンスに変更を適用する方法を教えてください。

答えて

1

このような場合は、Spring Cloud Busを使用する必要があります。 このフレームワークの背後にある考え方は、すべてのアプリケーションインスタンスをメッセージブローカー(RabbitMQまたはApache Kafka)のトピックにバインドすることです。

あなたのpom.xmlに以下の依存関係を追加します。上記の例で

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework.cloud</groupId> 
      <artifactId>spring-cloud-bus-parent</artifactId> 
      <version>1.3.2.RELEASE</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 
<dependencies> 
    <dependency> 
     <groupId>org.springframework.cloud</groupId> 
     <artifactId>spring-cloud-starter-bus-amqp</artifactId> 
    </dependency> 
</dependencies> 

を私はRabbitMQのあるAMQPへの依存性を追加しました。また、アプリケーションをRabbitMQにバインドする必要があります.PCFでは、プラットフォームに組み込まれているので簡単です。あなたがリフレッシュする必要がある場合

、あなたが呼び出す必要があります:

POST /bus/refresh 

これは、アプリケーションのすべてのインスタンスがリッスンしていることを話題にイベントをトリガーすると、結果として - すべてのインスタンスは、そのBeanを更新します構成。

幸運。

関連する問題

 関連する問題