传统上,Java的进程内事件分发都是通过发布者和订阅者之间的显式注册实现的。
设计EventBus就是为了取代这种显示注册方式,使组件间有了更好的解耦。
EventBus不是通用型的发布-订阅实现,不适用于进程间通信。
如下,当多个监听类(须使用@Subscribe注解)都处在同一类事件总线(可根据业务需求设计不同的事件总线)中时,当其中某一个监听类post事件后,其他每一个监听类都会收到同样的事件通知。
// Class is typically registered by the container. class EventBusChangeRecorder { @Subscribe public void recordCustomerChange(ChangeEvent e) { recordChange(e.getChange()); } } // somewhere during initialization eventBus.register(new EventBusChangeRecorder()); // much later public void changeCustomer() { ChangeEvent event = getChangeEvent(); eventBus.post(event); }
当不同JVM之间需要使用事件通知时,可使用一个中间件来作转换,如使用数据库、IO写文件都可,如下: