構成

メッセージブローカーのカスタマイズ

Spring Cloud Bus は Spring Cloud Stream を使用してメッセージをブロードキャストします。メッセージをフローさせるには、選択したバインダー実装をクラスパスに含めるだけで済みます。AMQP (RabbitMQ) および Kafka (spring-cloud-starter-bus-[amqp|kafka]) を備えたバス用の便利なスターターがあります。一般に、Spring Cloud Stream はミドルウェアの構成に Spring Boot 自動構成規則に依存します。たとえば、AMQP ブローカーのアドレスは、spring.rabbitmq.* 構成プロパティを使用して変更できます。Spring Cloud Bus には、spring.cloud.bus.* にいくつかのネイティブ構成プロパティがあります (たとえば、spring.cloud.bus.destination は、外部ミドルウェアとして使用するトピックの名前です)。通常はデフォルトで十分です。

メッセージブローカー設定をカスタマイズする方法の詳細については、Spring Cloud Stream ドキュメントを参照してください。

バスイベントのトレース

バスイベント ( RemoteApplicationEvent のサブクラス) は、spring.cloud.bus.trace.enabled=true を設定することでトレースできます。これを行うと、Spring Boot TraceRepository (存在する場合) には、送信された各イベントと各サービスインスタンスからのすべての ACK が表示されます。次の例は、/trace エンドポイントからのものです。

{
  "timestamp": "2015-11-26T10:24:44.411+0000",
  "info": {
    "signal": "spring.cloud.bus.ack",
    "type": "RefreshRemoteApplicationEvent",
    "id": "c4d374b7-58ea-4928-a312-31984def293b",
    "origin": "stores:8081",
    "destination": "*:**"
  }
  },
  {
  "timestamp": "2015-11-26T10:24:41.864+0000",
  "info": {
    "signal": "spring.cloud.bus.sent",
    "type": "RefreshRemoteApplicationEvent",
    "id": "c4d374b7-58ea-4928-a312-31984def293b",
    "origin": "customers:9000",
    "destination": "*:**"
  }
  },
  {
  "timestamp": "2015-11-26T10:24:41.862+0000",
  "info": {
    "signal": "spring.cloud.bus.ack",
    "type": "RefreshRemoteApplicationEvent",
    "id": "c4d374b7-58ea-4928-a312-31984def293b",
    "origin": "customers:9000",
    "destination": "*:**"
  }
}

前述のトレースは、RefreshRemoteApplicationEvent が customers:9000 から送信され、すべてのサービスにブロードキャストされ、customers:9000 および stores:8081 によって受信 (ACK) されたことを示しています。

ACK 信号を自分で処理するには、AckRemoteApplicationEvent および SentApplicationEvent 型の @EventListener をアプリに追加します (そしてトレースを有効にします)。あるいは、TraceRepository を利用して、そこからデータをマイニングすることもできます。

どのバスアプリケーションでも ACK を追跡できます。ただし、データに対してより複雑なクエリを実行したり、データを専門のトレースサービスに転送したりできる主要サービスでこれを実行すると便利な場合があります。