|
此版本仍在开发中,目前尚不稳定。如需最新稳定版本,请使用 spring-cloud-bus 5.0.1! |
自定义事件
广播您自己的事件
总线可以承载任何类型为 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 的类所在的包。在此示例中,com.acme 通过使用 BusConfiguration 所在的包进行注册。
您还可以通过使用 value、basePackages 或 basePackageClasses 属性在 @RemoteApplicationEventScan 上显式指定要扫描的包,如下例所示:
@Configuration
//@RemoteApplicationEventScan({"com.acme", "foo.bar"})
//@RemoteApplicationEventScan(basePackages = {"com.acme", "foo.bar", "fizz.buzz"})
@RemoteApplicationEventScan(basePackageClasses = BusConfiguration.class)
public class BusConfiguration {
...
}
前面所有 @RemoteApplicationEventScan 的示例都是等价的,即通过在 @RemoteApplicationEventScan 中显式指定包来注册 com.acme 包。
| 您可以指定多个基础包进行扫描。 |