カスタムイベント

自分のイベントをブロードキャストする

バスは、型 RemoteApplicationEvent のあらゆるイベントを伝送できます。デフォルトのトランスポートは JSON であり、デシリアライザーはどの型が使用されるかを事前に知る必要があります。新しい型を登録するには、それを org.springframework.cloud.bus.event のサブパッケージに入れる必要があります。

イベント名をカスタマイズするには、カスタムクラスで @JsonTypeName を使用するか、クラスの単純な名前を使用するデフォルトの戦略に依存することができます。

プロデューサーとコンシューマーの両方がクラス定義にアクセスする必要があります。

カスタムパッケージへのイベントの登録

カスタムイベントに org.springframework.cloud.bus.event のサブパッケージを使用できない、または使用したくない場合は、@RemoteApplicationEventScan アノテーションを使用して、型 RemoteApplicationEvent のイベントをスキャンするパッケージを指定する必要があります。@RemoteApplicationEventScan で指定されたパッケージにはサブパッケージが含まれます。

例: MyEvent という次のカスタムイベントを考えてみましょう。

public class MyEvent extends RemoteApplicationEvent {
    ...
}

次の方法で、そのイベントをデシリアライザーに登録できます。

@Configuration
@RemoteApplicationEventScan
public class BusConfiguration {
    ...
}

値を指定しない場合は、@RemoteApplicationEventScan を使用するクラスのパッケージが登録されます。この例では、BusConfiguration のパッケージを使用して com.acme を登録します。

次の例に示すように、@RemoteApplicationEventScan の valuebasePackages または basePackageClasses プロパティを使用して、スキャンするパッケージを明示的に指定することもできます。

@Configuration
//@RemoteApplicationEventScan({"com.acme", "foo.bar"})
//@RemoteApplicationEventScan(basePackages = {"com.acme", "foo.bar", "fizz.buzz"})
@RemoteApplicationEventScan(basePackageClasses = BusConfiguration.class)
public class BusConfiguration {
    ...
}

@RemoteApplicationEventScan の前述の例はすべて、com.acme パッケージが @RemoteApplicationEventScan でパッケージを明示的に指定することによって登録されるという点で同等です。

スキャンする複数の基本パッケージを指定できます。