Events 如何使用Reactor将事件分派给多个使用者,并根据事件数据筛选事件?

Events 如何使用Reactor将事件分派给多个使用者,并根据事件数据筛选事件?,events,reactor,project-reactor,Events,Reactor,Project Reactor,我正在评估Reactor()是否适合在Spring/enterprise应用程序中创建事件调度框架 首先,考虑一个具有接口的代码: A/COD>和具体事件类 B > C>代码>,等等。我想向多个消费者(即观察者)发送具体事件。在bean后期处理过程中,它们被注册到一个全局Reactor实例。但是,您可以动态注册它们。在大多数情况下,一个生产者以高速率向多个消费者发送事件 我使用了Selectors,即ClassSelector将正确的事件类型分派给正确的使用者。这似乎很有效 Reactor r

我正在评估Reactor()是否适合在Spring/enterprise应用程序中创建事件调度框架

首先,考虑一个具有接口的代码:<代码> A/COD>和具体事件类<代码> B<代码> > <代码> C>代码>,等等。我想向多个消费者(即观察者)发送具体事件。在bean后期处理过程中,它们被注册到一个全局

Reactor
实例。但是,您可以动态注册它们。在大多数情况下,一个生产者以高速率向多个消费者发送事件

我使用了
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);
但是,我想知道这是否是有效调度事件的建议方法


其次,我想知道是否可以根据事件数据过滤事件?如果我理解正确,
选择器
仅用于检查钥匙。这里我指的不是事件头,而是特定于域的对象属性。我想知道如何使用
Streams
Stream.filter(谓词p)
,但是是否也可以使用
Reactor
选择器进行过滤?当然,我可以编写一个委托消费者来检查数据,并在需要时将其委托给注册消费者。

有一个名为helper的对象,它帮助创建各种内置的
选择器
实现。在那里,您可以看到对
谓词选择器的引用。
谓词选择器
非常有用,因为它允许您完全控制通知键的匹配。它可以是一个Spring
@Bean
、一个匿名内部类、一个lambda,或者任何符合简单的
谓词
接口的东西

或者,如果类路径中有,则可以使用基于JsonPath查询的进行匹配

在这两种情况下,如果重要数据实际上是域对象本身,则不需要为密钥使用单独的对象。只需通知对象并将
事件
作为第二个参数传递

MyPojo p = service.next();
reactor.notify(p, Event.wrap(p));
使用
谓词
和事件作为键正是所需要的。我想知道我怎么没有想到使用实际事件数据作为关键。在将来添加更多示例和用例时,可能是Reactor wiki的一个好例子。无论如何,反应堆看起来绝对是我们的好选择。非常感谢您的回答,并期待着即将发布的非常有前途的库!:)
MyPojo p = service.next();
reactor.notify(p, Event.wrap(p));