SOFAArk 提供了简单的事件总线,Plugin 和 Biz 可以使用事件总线服务 EventAdminService 注册事件监听器并发布和监听事件:

  1. public interface EventAdminService {
  2. /**
  3. * Initiate synchronous delivery of an event. This method does not return to
  4. * the caller until delivery of the event is completed.
  5. *
  6. * @param event The event to send to all listeners which subscribe to the
  7. * topic of the event.
  8. */
  9. void sendEvent(ArkEvent event);
  10. /**
  11. * Register an event handler
  12. *
  13. * @param eventHandler
  14. */
  15. void register(EventHandler eventHandler);
  16. /**
  17. * un-register an event handler
  18. * @param eventHandler
  19. */
  20. void unRegister(EventHandler eventHandler);
  21. /**
  22. * un-register event handler whose classLoader matches the specified param.
  23. * @param classLoader
  24. */
  25. void unRegister(ClassLoader classLoader);
  26. }

EventAdminSerivce 接口定义四个方法,通过这四个方法,Plugin 和 Biz 可以方便地注册事件监听器以及发送事件,目前只支持同步事件。

事件

实现统一的事件接口类型:

  1. public interface ArkEvent {
  2. /**
  3. * Returns the topic of event
  4. *
  5. * @return String return event topic
  6. */
  7. String getTopic();
  8. }

调用 EventAdminService.sendEvent 方法广播事件,通知所有的监听器 EventHandler

事件监听器

实现统一的事件监听器接口:

  1. public interface EventHandler extends PriorityOrdered {
  2. /**
  3. * Called by the {@link EventAdminService} service to notify the listener of an
  4. * event.
  5. *
  6. * @param event The event that occurred.
  7. */
  8. void handleEvent(ArkEvent event);
  9. }

调用 EventAdminService.register 方法注册监听器,即可接受广播事件。

注意事项

Plugin 内部只能手动注册事件监听器,如果 Biz 是 Spring Boot/SOFABoot 应用,所有实现接口 EventHandler 的 Bean 都会默认被注册,这也是在 Biz 中推荐的用法,在应用卸载时,也会自动注销监听器