SpringBoot+EventBus使用教程(一)

一、简介

EventBus是一个基于发布订阅的事件总线,在Java和Android里都可以使用。

eventBus工作示意图

作为一个消息总线,有三个主要的元素:

  1. Event:事件
  2. Subscriber:事件订阅者,接收特定的事件;有onEvent,onEventMainThread,onEventBackgroundThread,onEventAsync这四个方法,分别对应不同的处理模式;
  3. Publisher:事件发布者,用于通知Subscriber有事件发生

事件处理有4种模式:

  1. PostThread:事件的处理在和事件的发送在相同的进程,所以事件处理时间不应太长,不然影响事件的发送线程,而这个线程可能是UI线程。对应的函数名是onEvent。
  2. MainThread: 事件的处理会在UI线程中执行。事件处理时间不能太长,这个不用说的,长了会ANR的,对应的函数名是onEventMainThread。
  3. BackgroundThread:事件的处理会在一个后台线程中执行,对应的函数名是onEventBackgroundThread,虽然名字是BackgroundThread,事件处理是在后台线程,但事件处理时间还是不应该太长,因为如果发送事件的线程是后台线程,会直接执行事件,如果当前线程是UI线程,事件会被加到一个队列中,由一个线程依次处理这些事件,如果某个事件处理时间太长,会阻塞后面的事件的派发或处理。
  4. Async:事件处理会在单独的线程中执行,主要用于在后台线程中执行耗时操作,每个事件会开启一个线程(有线程池),但最好限制线程的数目。适合于长时间的后台网络请求。

二、使用

1.引入pom

2.定义事件监听类

3.EventBusConfig

4.EventHandler

5.测试类

6.运行结果

三、自定义事件

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

1.添加MessageEvent类

2.修改EventHandler里的eventPost方法(红色字体部分)

3.修改EventListener类里的onMessageEvent方法(红色字体部分)

4.运行测试类,查看结果

四、最后

本篇初步介绍了如何在springboot里使用eventbus,下一篇文章将介绍如何集成spring-boot-starter-guava-eventbus

EventBus地址:https://github.com/greenrobot/EventBus

另外,本篇教程使用了lombok插件。

本文系本人原创,如要转载,请注明出处!

0

《SpringBoot+EventBus使用教程(一)》有2个想法

发表评论

邮箱地址不会被公开。