Broadcasting Your Own Events
The Bus can carry any event of type RemoteApplicationEvent
, but the default transport is JSON and the deserializer needs to know which types are going to be used ahead of time. To register a new type it needs to be in a subpackage of org.springframework.cloud.bus.event
.
To customise the event name you can use @JsonTypeName
on your custom class or rely on the default strategy which is to use the simple name of the class. Note that both the producer and the consumer will need access to the class definition.
Registering events in custom packages
If you cannot or don’t want to use a subpackage of org.springframework.cloud.bus.event
for your custom events, you must specify which packages to scan for events of type RemoteApplicationEvent
using @RemoteApplicationEventScan
. Packages specified with @RemoteApplicationEventScan
include subpackages.
For example, if you have a custom event called FooEvent
:
package com.acme;
public class FooEvent extends RemoteApplicationEvent {
...
}
you can register this event with the deserializer in the following way:
package com.acme;
@Configuration
@RemoteApplicationEventScan
public class BusConfiguration {
...
}
Without specifying a value, the package of the class where @RemoteApplicationEventScan
is used will be registered. In this example com.acme
will be registered using the package of BusConfiguration
.
You can also explicitly specify the packages to scan using the value
, basePackages
or basePackageClasses
properties on @RemoteApplicationEventScan
. For example:
package com.acme;
@Configuration
[email protected]Illegal HTML tag removed : /* */({"com.acme", "foo.bar"})
[email protected]Illegal HTML tag removed : /* */(basePackages = {"com.acme", "foo.bar", "fizz.buzz"})
@RemoteApplicationEventScan(basePackageClasses = BusConfiguration.class)
public class BusConfiguration {
...
}
All examples of @RemoteApplicationEventScan
above are equivalent, in that the com.acme
package will be registered by explicitly specifying the packages on @RemoteApplicationEventScan
. Note, you can specify multiple base packages to scan.