发布订阅模型

发布使用的是 EventBus ,而响应事件则使用 发布订阅模型

Reactor 的 EventBus 可以让你在通知的主键匹配特定条件时创建一个处理事件的消费者(Consumer)。这项任务是在 选择器(Selector) 中被执行的。这跟订阅主题很像,但 Reactor 选择器 的实现可以匹配各种标准,从 Class<?> 类型到 JsonPath 表达式。这种抽象化非常的灵活且强大,它为匹配提供了广泛的可能性。

在创建多个使用相同 Selector 的消费者,也可以创建多个匹配同一主键的 Selector 。这种方式使得聚合和广播更加容易:你只需要将多个消费者订阅到同一主体选择器下即可。

如果你刚从 Reactor 1.1 升级的话,你会发现 Reactor 类消失了。它被重命名为 EventBus 类,这是为了更精准的反应此类在框架中的角色。

使用选择器处理事件

  1. EventBus bus = EventBus.create(Environment.get());
  2. bus.on($("topic"), (Event<String> ev) -> {
  3. String s = ev.getData();
  4. System.out.printf("Got %s on thread %s%n", s, Thread.currentThread());
  5. });
  6. bus.notify("topic", Event.wrap("Hello World!"));
  • 使用默认设置创建一个 EventBus 类,从静态的 Environment 中分享 RingBufferDispatcher
  • 注册一个 Customer,当主键匹配 Selector 时通知 EventBus 调用。
  • 使用给定主题发布 EventEventBus

静态方法 $ 是方便调用 Selectors.object() 的缩写。有的人不喜欢使用缩写方法,例如对象选择器$() ,正则选择器R()*类选择器T() 等等。选择器也为这些缩写方法提供了长命名的替代方法。这些缩写方法只是为了减少代码噪音,提高代码可阅读性而的设定的。