Guava事件处理组件Eventbus使用入门

1.说明

EventBus是Google Guava的事件处理机制,
是设计模式中观察者模式的优雅实现,
是一个进程内的生产者/消费者模型。
为了解耦事件的发布和订阅,
使用EventBus组件,
是一个非常优雅和简单解决方案,
同时可以异步处理事件任务。

2.基本用法

  1. 创建事件消息类,普通的POJO类即可,无需额外的注解或者继承。
  2. 创建事件监听类,在事件处理方法上使用@Subscribe即可。
  3. 创建EventBus实例,并且注册事件监听类。
  4. 创建事件消息类的实例,使用EventBus实例发布事件。

下面演示从设备采集CPU和内存信息,
把采集到的信息直接当成事件,
发布给对应的监听类处理。

3.创建事件消息类

CPU和内存类,非常简单,
只需要和业务相关即可,
框架对消息类不做要求。

public class CpuInfos {...}
public class MemoryInfos {...}

4.创建事件监听类

处理监听类DevmEventListener
能够处理采集到的设备信息,
为了演示简单,这里只是打印日志,
注意使用@Subscribe注解:

import com.google.common.eventbus.Subscribe;
public class DevmEventListener {
    private static Logger logger = LoggerFactory.getLogger(DevmEventListener.class);

    @Subscribe
    public void handleDevmCpuInfos(CpuInfos cpuInfos) {
        logger.info("CPU信息处理={}", cpuInfos);
    }

    @Subscribe
    public void handleDevmMemoryInfos(MemoryInfos memoryInfos) {
        logger.info("内存信息处理={}", memoryInfos);
    }
}

5.创建EventBus实例,注册事件监听类

import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.AsyncEventBus;
// 异步非阻塞模式
EventBus eventBus = new AsyncEventBus(Executors.newFixedThreadPool(DEFAULT_EVENTBUS_THREAD_POOL_SIZE));
// 注册观察者,即事件处理类
eventBus.register(new DevmEventListener());

上面的AsyncEventBus是异步非阻塞模式,
也可以创建EventBus使用同步阻塞模式。

EventBus eventBus = new EventBus("Synchronous");

一个EventBus实例中可用注册多个观察者,
观察者中如果订阅了相同的事件,
会按照注册顺序调用对应的处理方法。
应用中可用创建多个EventBus实例,
隔离不同的事件处理场景。

6.发布事件

创建事件消息类的实例,
使用EventBus实例发布事件:

CpuInfos cpuInfos = new CpuInfos();
eventBus.post(cpuInfos);

7.运行测试

运行代码,输出如下日志:

2021-09-03 15:22:31.189 [pool-3-thread-2] INFO  [DevmEventListener.handleDevmCpuInfos(24)] - CPU信息处理=cpuInfo {
  entIndex: 16973825
  interval: 8
  ovloadThreshold: 90
  position: "3"
  systemCpuUsage: 16
  unovloadThreshold: 75
}

8.参考文章

Guava教程之EventBus
Google Guava EventBus(事件总线)

你可能感兴趣的:(Guava事件处理组件Eventbus使用入门)