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);@Subscribepublic void handleDevmCpuInfos(CpuInfos cpuInfos) {logger.info("CPU信息处理={}", cpuInfos);}@Subscribepublic 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: 16973825interval: 8ovloadThreshold: 90position: "3"systemCpuUsage: 16unovloadThreshold: 75
}

8.参考文章

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


http://www.taodudu.cc/news/show-1250954.html

相关文章:

  • Junit4集成到Maven工程
  • Redis集成到Maven工程(Jedis客户端)
  • SpringBoot集成Cache缓存(Redis缓存,RedisTemplate方式)
  • Junit5集成到Maven工程
  • Junit5集成到SpringBoot工程
  • 语言代码表
  • Protobuf生成Java代码(Maven)
  • Protobuf生成Java代码(命令行)
  • Maven查看插件信息
  • SpringBoot脚手架工程快速搭建
  • SpringBoot集成MyBatis-Plus分页插件
  • SNMP客户端工具MIB Browser
  • PowerDesigner运行自定义VBS脚本,复制Name到Comment
  • BitMap-BitSet(JDK1.8)基本使用入门
  • IDEA查看Java类的UML关系图
  • 30. 包含min函数的栈
  • 35. 复杂链表的复制
  • 58 - II. 左旋转字符串
  • 03. 数组中重复的数字
  • 53 - II. 0~n-1中缺失的数字
  • 04. 二维数组中的查找
  • 11. 旋转数组的最小数字
  • 50. 第一个只出现一次的字符
  • 32 - I. 从上到下打印二叉树
  • 32 - II. 从上到下打印二叉树 II
  • 32 - III. 从上到下打印二叉树 III
  • 26. 树的子结构
  • PostgreSQL数据库密码
  • SpringBoot中使用Hibernate Validator校验工具类
  • 28. 对称的二叉树

Guava事件处理组件Eventbus使用入门相关推荐

  1. Google guava 事件总线 EventBus 进程内消息队列

    Google guava 事件总线 EventBus 创建事件总线流程 码代码 引入依赖 一个简单的事件处理 监听者 创建事件生产者总线.注册事件监听者.发送事件 运行结果 扩展 多个事件监听者加De ...

  2. Guava包学习--EventBus

    之前没用过这个EventBus,然后看了一下EventBus的源码也没看明白,(-__-)b.反正大概就是弄一个优雅的方式实现了观察者模式吧.慢慢深入学习一下. 观察者模式其实就是生产者消费者的一个变 ...

  3. vue学习笔记-03-浅谈组件-概念,入门,如何用props给组件传值?

    vue学习笔记-03-浅谈组件-概念,入门,如何用props给组件传值? 文章目录 vue学习笔记-03-浅谈组件-概念,入门,如何用props给组件传值? 什么是组件? 为什么要使用组件? 如何使用 ...

  4. .NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(一)

    原文:.NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(一) 在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下F ...

  5. 组件Element的入门学习

    组件Element的入门学习 第一节:Layout布局 基础默认一行24列,通过自己简单的布局可以实现想要的效果 基础布局 注意;通过 row 和 col 组件,并通过 col 组件的 span 属性 ...

  6. Android导航组件Navigation从入门到精通

    文章目录 一.前言 二.导航简介 2.1 导航组件的组成 2.2 导航的原则 2.2.1 固定的起始目的地 2.2.2 导航状态表现为目的地堆栈 2.2.3 在应用的任务中向上按钮和返回按钮行为相同 ...

  7. mysql binlog 订阅_数据库binlog订阅和消费组件canal快速入门

    一.什么是canal 1.定位 Canal是阿里巴巴开源的一款基于mysql数据库binlog增量日志分析提供数据订阅和消费功能的组件 2.原理 Canal模拟MySQL Slave协议,将自己伪装成 ...

  8. vue递归组件eventBus策略解决父子组件通讯问题

    一.首先你需要做的是创建事件总线并将其导出,以便其它模块可以使用或者监听它. 创建一个bus.js文件代码如下 import Vue from 'vue' export var bus = new V ...

  9. java第三方类库Guava开源组件使用

    版本下载: https://repo1.maven.org/maven2/com/google/guava/guava/ Guava工程包含了若干被Google的Java项目广泛依赖的核心库,例如:集 ...

最新文章

  1. CH - 4901 关押罪犯(二分图判定+二分/并查集)
  2. linux-shell面试题 之二
  3. C 的Pair用法分类整理(精)
  4. ZooKeeper学习笔记—配置管理
  5. kafka整合ldap权限管理
  6. 用ClusterSSH管理多台Linux服务器(2)
  7. python 获取json后 dict列表形式输出结果
  8. ITIL4服务管理的新思路与实践案例介绍
  9. SEFS安全透明加密内核
  10. Python Intro - xrange obsoleted by Python3
  11. 无线信号不好,如何进行扩展?(中继、桥接、WDS、PLC)
  12. 数据结构-栈详解(大概)
  13. 【DBeaver】安装与使用教程
  14. 肖sir__面试就业课___数据库
  15. 大唐:我家阁楼通公主府(二)
  16. dos 命令——切换盘符与切换工作目录
  17. oracle上亿数据的删除
  18. 为什么《自己动手设计物联网》 和《全栈应用开发》一样也打了 4.9 折??
  19. 基于STC8的红外遥控灯
  20. 解决win10系统搜索、网络连接按钮无法使用以及windows无法访问指定设备、路径或文件缺少权限的问题

热门文章

  1. Python数据挖掘和机器学习
  2. 字符串string 、byte[]、MemoryStream、Base64String的相互转换
  3. Linux下部署ASP.NET服务连接oracle遇到的问题记录
  4. 提升安全性WindowsXP必禁的十大服务
  5. javascript中数据访问性能优化简析
  6. 用纯css3和html实现一些复杂的泡沫对话框
  7. vant-联系人卡片
  8. JavaScript算法(实例十)回文数 / 立方根 / 进制转化
  9. Object(包装对象)
  10. 前端动态获取servlet虚拟路径_Day40_Servletamp;HTTPamp;Request