49. Broadcast 自己的Active
Bus 可以携带任何类型为RemoteApplicationEvent
的事件。默认传输是 JSON,解串器需要提前知道将要使用哪些类型。要注册新类型,必须将其放入org.springframework.cloud.bus.event
子包中。
要自定义事件名称,可以在自定义类上使用@JsonTypeName
,也可以依赖默认策略(即使用类的简单名称)。
Note
生产者和 Consumer 都需要访问类定义。
49.1 在自定义程序包中注册事件
如果您不能或不想将org.springframework.cloud.bus.event
的子包用于自定义事件,则必须使用@RemoteApplicationEventScan
注解指定要扫描哪些包以搜索RemoteApplicationEvent
类型的事件。用@RemoteApplicationEventScan
指定的软件包包括子软件包。
例如,考虑以下自定义事件,称为MyEvent
:
package com.acme;
public class MyEvent extends RemoteApplicationEvent {
...
}
您可以通过以下方式在反序列化器中注册该事件:
package com.acme;
@Configuration
@RemoteApplicationEventScan
public class BusConfiguration {
...
}
不指定值,将注册使用@RemoteApplicationEventScan
的类的包。在本示例中,使用BusConfiguration
包注册了com.acme
。
您还可以使用@RemoteApplicationEventScan
上的value
,basePackages
或basePackageClasses
属性显式指定要扫描的软件包,如以下示例所示:
package com.acme;
@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
上显式指定软件包来注册的。
Note
您可以指定要扫描的多个基本软件包。