发布订阅模型
发布使用的是 EventBus
,而响应事件则使用 发布订阅模型
Reactor 的 EventBus
可以让你在通知的主键匹配特定条件时创建一个处理事件的消费者(Consumer)
。这项任务是在 选择器(Selector)
中被执行的。这跟订阅主题很像,但 Reactor 选择器
的实现可以匹配各种标准,从 Class<?>
类型到 JsonPath
表达式。这种抽象化非常的灵活且强大,它为匹配提供了广泛的可能性。
在创建多个使用相同 Selector
的消费者,也可以创建多个匹配同一主键的 Selector
。这种方式使得聚合和广播更加容易:你只需要将多个消费者订阅到同一主体选择器下即可。
如果你刚从 Reactor 1.1 升级的话,你会发现
Reactor
类消失了。它被重命名为EventBus
类,这是为了更精准的反应此类在框架中的角色。
使用选择器处理事件
EventBus bus = EventBus.create(Environment.get());
bus.on($("topic"), (Event<String> ev) -> {
String s = ev.getData();
System.out.printf("Got %s on thread %s%n", s, Thread.currentThread());
});
bus.notify("topic", Event.wrap("Hello World!"));
- 使用默认设置创建一个
EventBus
类,从静态的Environment
中分享RingBufferDispatcher
- 注册一个
Customer
,当主键匹配Selector
时通知EventBus
调用。 - 使用给定主题发布
Event
到EventBus
。
静态方法
$
是方便调用Selectors.object()
的缩写。有的人不喜欢使用缩写方法,例如对象选择器的$()
,正则选择器的R()
,*类选择器的T()
等等。选择器也为这些缩写方法提供了长命名的替代方法。这些缩写方法只是为了减少代码噪音,提高代码可阅读性而的设定的。