我正在评估 Reactor ( https://github.com/reactor/reactor ) 是否适合在我的 Spring / 企业应用程序中创建事件调度框架。
首先,考虑一个场景,其中您有一个接口A
和具体的事件类B
,C
等等。我想将具体事件分派给多个消费者,即观察者。这些Reactor
在 bean 后处理期间注册到全局实例。但是,您可以动态注册它们。在大多数情况下,只有一个生产者以高速率向多个消费者发送事件。
我使用Selector
了 s,即,ClassSelector
将正确的事件类型分派给正确的消费者。这似乎工作得很好。
Reactor reactor = ...
B event = ...
Consumer<Event<B>> consumer = ...
// Registration is used to cancel the subscription later
Registration<?> registration = reactor.on(T(event.getClass()), consumer);
要通知,请使用事件的类型作为键
B event = ...
reactor.notify(event.getClass(), Event.wrap(event));
但是,我想知道这是否是有效调度事件的建议方法?
其次,我想知道是否可以根据事件数据过滤事件?如果我理解正确,Selector
s 仅用于检查密钥。我在这里指的不是事件标头,而是特定于域的对象属性。我想知道使用Streams
and Stream.filter(Predicate<T> p)
,但是是否也可以使用Reactor
and Selector
s 进行过滤?当然,我可以编写一个委托消费者来检查数据并在需要时将其委托给注册消费者。