Spring Boot + EventBus使用教程

简介

EventBus是一个基于发布订阅的事件总线,在Java和Android里都可以使用。
EventBus:https://github.com/greenrobot/EventBus

EventBus

使用

引入pom

<dependency>
    <groupId>org.greenrobot</groupId>
    <artifactId>eventbus</artifactId>
    <version>3.1.1</version>
</dependency>

定义事件监听类

@Slf4j
@Component
public class EventListener {
    @Subscribe
    public void onMessageEvent(String event) {
        log.info("Subscribe message:{}", event);
    }
}

EventBusConfig

@Configuration
public class EventBusConfig {

    @Bean
    public EventBus eventBus() {
        return new EventBus();
    }
}

EventHandler

@Component
@Slf4j
public class EventHandler {

    @Autowired
    private EventBus eventBus;

    @Autowired
    private EventListener eventListener;

    @PostConstruct
    public void init() {
        eventBus.register(eventListener);
    }

    @PreDestroy
    public void destroy() {
        eventBus.unregister(eventListener);
    }

    public void eventPost() {
        eventBus.post("test");
        log.info("post event");
    }
}

测试类

@RunWith(SpringRunner.class)
@SpringBootTest
public class EventBusTest {

    @Autowired
    private EventHandler eventHandler;

    @Test
    public void postEvent() {
        eventHandler.eventPost();
    }
}

运行结果

2019-11-01 22:33:28.657  INFO 6656 --- [     main] cn.appblog.test.eventbus.EventListener   : Subscribe message:test
2019-11-01 22:33:28.671  INFO 6656 --- [     main] cn.appblog.test.eventbus.EventHandler    : post event

自定义事件

上面的例子,我们发送和接收的都是String,如果我想event是个bean,怎么操作?

添加MessageEvent类

@Data
@Builder
public class MessageEvent {

    private Integer id;
    private String name;
}

修改EventHandler里的eventPost方法

public void eventPost() {
    eventBus.post(MessageEvent.builder().id(1).name("test").build());
    log.info("post event");
}

修改EventListener类里的onMessageEvent方法

@Subscribe
public void onMessageEvent(MessageEvent event) {
    log.info("Subscribe message:{}", event);
}

运行测试类,查看结果

2019-11-01 22:53:28.273  INFO 2252 --- [     main] cn.appblog.test.eventbus.EventListener   : Subscribe message:MessageEvent(id=1, name=test)
2019-11-01 22:53:28.278  INFO 2252 --- [     main] cn.appblog.test.eventbus.EventHandler    : post event
上一篇 在Spring Boot中使用Java线程池ExecutorService
下一篇 Spring Cloud Gray 微服务灰度中间件
目录
文章列表
1 JS定时器整理(执行一次、重复执行)
JS定时器整理(执行一次、重复执行)
2
Spring Cloud熔断器Hystrix
Spring Cloud熔断器Hystrix
3
Linux sftp命令
Linux sftp命令
4
Docker与Spring Boot的集成:docker-maven-plugin使用
Docker与Spring Boot的集成:docker-maven-plugin使用
5
Maven依赖下载失败原因排查及解决方式
Maven依赖下载失败原因排查及解决方式
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。