美文网首页
Guava事件处理组件Eventbus使用入门

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

作者: 木木与呆呆 | 来源:发表于2021-09-03 15:33 被阅读0次

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使用入门

    1.说明 EventBus是Google Guava的事件处理机制,是设计模式中观察者模式的优雅实现,是一个进程内...

  • Guava之EventBus源码

    最近需要使用事件驱动,打算使用EventBus管理事件的注册和分发。于是仔细阅读了下Guava的EventBus实...

  • Guava - EventBus(事件总线)

    Guava在guava-libraries中为我们提供了事件总线EventBus库,它是事件发布订阅模式的实现,让...

  • Guava EventBus实现原理

    开篇 EventBus是Guava的事件处理机制,是设计模式中的观察者模式的优雅实现。对于事件监听和发布订阅模式,...

  • Guava EventBus应用实例

    来个开头 EventBus是guava包中的一个事件通知组件,可以用来在同一个JVM中,实现事件通知机制。异步和同...

  • Guava——EventBus

    EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于事件监...

  • EventBus

    EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于事件监...

  • guava EventBus使用

    EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于事件监...

  • vue事件总线EventBus

    vue组件有父子组件通信:props兄弟组件通信:可以使用vuex,还可以使用事件总线eventBus 使用方法:...

  • Google Guava EventBus(事件总线)

    EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于...

网友评论

      本文标题:Guava事件处理组件Eventbus使用入门

      本文链接:https://www.haomeiwen.com/subject/juskwltx.html