8. 广播您自己的事件

总线可以承载任何类型为 RemoteApplicationEvent 的事件。默认传输方式是 JSON,且反序列化器需要提前知道将要使用的具体类型。要注册一种新类型,您必须将其放置在 org.springframework.cloud.bus.event 的子包中。spring-doc.cadn.net.cn

要自定义事件名称,您可以在自定义类中使用 @JsonTypeName,或依赖默认策略,即使用类的简单名称。spring-doc.cadn.net.cn

生产者和消费者都需要访问类定义。

8.1. 在自定义包中注册事件

如果您无法或不愿为自定义事件使用 org.springframework.cloud.bus.event 的子包,则必须通过使用 @RemoteApplicationEventScan 注解指定要扫描哪些包以查找类型为 RemoteApplicationEvent 的事件。使用 @RemoteApplicationEventScan 指定的包将包含其子包。spring-doc.cadn.net.cn

例如,考虑以下自定义事件,称为 MyEventspring-doc.cadn.net.cn

package com.acme;

public class MyEvent extends RemoteApplicationEvent {
    ...
}

您可以以如下方式将该事件注册到反序列化器中:spring-doc.cadn.net.cn

package com.acme;

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

未指定值时,将注册使用 @RemoteApplicationEventScan 的类所在的包。在此示例中,com.acme 通过使用 BusConfiguration 所在的包进行注册。spring-doc.cadn.net.cn

您还可以通过使用 valuebasePackagesbasePackageClasses 属性在 @RemoteApplicationEventScan 上显式指定要扫描的包,如下例所示:spring-doc.cadn.net.cn

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 的示例都是等价的,即通过在 @RemoteApplicationEventScan 中显式指定包来注册 com.acme 包。spring-doc.cadn.net.cn

您可以指定多个基础包进行扫描。