以下のエントリの続き。
Spring Cloud Configのリファレンス読んだ - SIerだけど技術やりたいブログ
SpringCloudBusとは?
メッセージングサービス(AMQP)を利用して、アプリケーション内に色々な情報をブロードキャストするためのプロダクト。
具体例
SpringCloudConfigを利用しているときを例にとって説明すると…
導入前
gitサーバの設定ファイルの変化を各アプリに反映するためには、各appの/refreshにPOSTしてrefreshScopeのBeanを作り直す必要がある。
ということは、アプリのインスタンスが100コあった場合は、それぞれのサーバに対して100回POSTする必要がある。
導入後
SpringCloudBusを利用すると、どっかのサーバに1回だけ/bus/refreshにPOSTすればrefreshScopeのBeanを作り直すように各アプリへブロードキャストされる。
アプリのインスタンスが100コあったとしても楽。
https://www.slideshare.net/mobile/tsuyo/ss-47021186/15
実装方法
依存性をpom.xmlに設定する。
(SpringCloudConfig使う場合はspring-cloud-starter-configも追加する)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
AMQPの設定をapplicaiton.propertiesに設定する。
(spring.rabbitmq.hostは、rabbitMQが動いているホスト名orIPアドレスに変更する。)
spring.rabbitmq.host=mybroker.com
spring.rabbitmq.port=5672
spring.rabbitmq.username=user
spring.rabbitmq.password=secret
AMQPを起動する。(自分はdockerで起動した。)
docker run -p 5672:5672 -e RABBITMQ_DEFAULT_USER=user -e RABBVITMQ_DEFAULT_PASS=secret rabbitmq:3
/bus/refreshにPOSTすれば各appにもrefreshScopeのBeanを再度生成するようにメッセージがブロードキャストされて、configサーバの設定が反映される。
サービスを絞りたい場合
今のままだと同じAMQPにつながっている全てのサービスにブロードキャストされてしまう。
ブロードキャストするサービスを絞りたい場合は、“/bus/refresh?destination=xxx:**”
とPOSTするときにdestinationパラメータを付ければいいらしい。destinationに設定できるApplicationContext IDのルールはリファレンス参照。http://cloud.spring.io/spring-cloud-static/docs/1.0.x/spring-cloud.html#_spring_cloud_bus
終わり
恐ろしいほど簡単だけどAMQPトラブったら呆然とする自信ある。