-
Notifications
You must be signed in to change notification settings - Fork 54
事件总线
钟勋 edited this page Mar 21, 2020
·
14 revisions
事件总线用于在一个应用内发布事件和监听事件,类似发布订阅模式。
<dependency>
<groupId>org.bekit</groupId>
<artifactId>event</artifactId>
<version>1.3.0.RELEASE</version>
</dependency>
- 如果是spring-boot项目则不需要进行任何配置。
- 如果是非spring-boot项目则需要手动引入事件总线配置类EventBusConfiguration。比如:
@Configuration
@Import(org.bekit.event.boot.EventBusConfiguration.class)
public class MyImport {
}
使用事件总线步骤:1、定义事件类型,2、定义事件监听器,3、发布事件
事件类型就是普通的java类,不需要实现特定接口,也不需要打上特定注解。
// 添加用户事件
public class AddUserEvent {
// 用户id
private String userId;
// 用户名
private String userName;
public AddUserEvent(String userId, String userName) {
this.userId = userId;
this.userName = userName;
}
// 在此省略getter、setter
}
一个监听器内可以监听多种类型的事件,不同监听器可以监听同一种事件。
// 用户监听器
@DomainListener(priority = 1) // 事件监听器注解,属性priority表示优先级
public class UserListener {
@org.bekit.event.annotation.Listen(priorityType = PriorityType.ASC) // 监听注解(priority值越小优先级越高)
public void listenAddUser(AddUserEvent event) {
// 监听到新增用户事件后,执行具体业务
}
@org.bekit.event.annotation.Listen(priorityType = PriorityType.DESC) // 监听注解(priority值越大优先级越高)
public void listenDeleteUser(DeleteUserEvent event) {
// 监听到删除用户事件后,执行具体业务
}
}
一个事件发生后监听器执行顺序:先执行@Listen中priorityType=PriorityType.ASC的监听器,并按照优先级大小(@DomainListener的priority属性)由小到大执行;再执行@Listen中priorityType=PriorityType.DESC的监听器,并按照优先级大小由大到小执行。
在需要发布事件的地方注入事件发布器EventPublisher
@Autowired
private EventPublisher eventPublisher;
然后就可以发布事件:
// AddUserEvent是自定义的事件类型
eventPublisher.publish(new AddUserEvent("123","zhangsan"));