广播自己的Events
优质
小牛编辑
147浏览
2023-12-01
总线可以携带任何类型为RemoteApplicationEvent
的事件,但默认传输是JSON,并且解串器需要知道哪些类型将提前使用。要注册一个新类型,它需要在org.springframework.cloud.bus.event
的子包中。
要自定义事件名称,您可以在自定义类上使用@JsonTypeName
,或者依赖默认策略来使用类的简单名称。请注意,生产者和消费者都需要访问类定义。
在自定义包中注册事件
如果您不能或不想为自定义事件使用org.springframework.cloud.bus.event
的子包,则必须使用@RemoteApplicationEventScan
指定要扫描类型为RemoteApplicationEvent
的事件的包。使用@RemoteApplicationEventScan
指定的软件包包括子包。
例如,如果您有一个名为FooEvent
的自定义事件:
package com.acme;
public class FooEvent extends RemoteApplicationEvent {
...
}
您可以通过以下方式与解串器注册此事件:
package com.acme;
@Configuration
@RemoteApplicationEventScan
public class BusConfiguration {
...
}
没有指定一个值,使用@RemoteApplicationEventScan
的类的包将被注册。在这个例子中,com.acme
将使用BusConfiguration
的包进行注册。
您还可以使用@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
上明确指定程序包来注册。请注意,您可以指定要扫描的多个基本软件包。