Guava事件处理组件Eventbus使用入门
1.说明
EventBus是Google Guava的事件处理机制,
是设计模式中观察者模式的优雅实现,
是一个进程内的生产者/消费者模型。
为了解耦事件的发布和订阅,
使用EventBus组件,
是一个非常优雅和简单解决方案,
同时可以异步处理事件任务。
2.基本用法
- 创建事件消息类,普通的POJO类即可,无需额外的注解或者继承。
- 创建事件监听类,在事件处理方法上使用@Subscribe即可。
- 创建EventBus实例,并且注册事件监听类。
- 创建事件消息类的实例,使用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使用入门相关推荐
- Google guava 事件总线 EventBus 进程内消息队列
Google guava 事件总线 EventBus 创建事件总线流程 码代码 引入依赖 一个简单的事件处理 监听者 创建事件生产者总线.注册事件监听者.发送事件 运行结果 扩展 多个事件监听者加De ...
- Guava包学习--EventBus
之前没用过这个EventBus,然后看了一下EventBus的源码也没看明白,(-__-)b.反正大概就是弄一个优雅的方式实现了观察者模式吧.慢慢深入学习一下. 观察者模式其实就是生产者消费者的一个变 ...
- vue学习笔记-03-浅谈组件-概念,入门,如何用props给组件传值?
vue学习笔记-03-浅谈组件-概念,入门,如何用props给组件传值? 文章目录 vue学习笔记-03-浅谈组件-概念,入门,如何用props给组件传值? 什么是组件? 为什么要使用组件? 如何使用 ...
- .NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(一)
原文:.NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(一) 在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下F ...
- 组件Element的入门学习
组件Element的入门学习 第一节:Layout布局 基础默认一行24列,通过自己简单的布局可以实现想要的效果 基础布局 注意;通过 row 和 col 组件,并通过 col 组件的 span 属性 ...
- Android导航组件Navigation从入门到精通
文章目录 一.前言 二.导航简介 2.1 导航组件的组成 2.2 导航的原则 2.2.1 固定的起始目的地 2.2.2 导航状态表现为目的地堆栈 2.2.3 在应用的任务中向上按钮和返回按钮行为相同 ...
- mysql binlog 订阅_数据库binlog订阅和消费组件canal快速入门
一.什么是canal 1.定位 Canal是阿里巴巴开源的一款基于mysql数据库binlog增量日志分析提供数据订阅和消费功能的组件 2.原理 Canal模拟MySQL Slave协议,将自己伪装成 ...
- vue递归组件eventBus策略解决父子组件通讯问题
一.首先你需要做的是创建事件总线并将其导出,以便其它模块可以使用或者监听它. 创建一个bus.js文件代码如下 import Vue from 'vue' export var bus = new V ...
- java第三方类库Guava开源组件使用
版本下载: https://repo1.maven.org/maven2/com/google/guava/guava/ Guava工程包含了若干被Google的Java项目广泛依赖的核心库,例如:集 ...
最新文章
- CH - 4901 关押罪犯(二分图判定+二分/并查集)
- linux-shell面试题 之二
- C 的Pair用法分类整理(精)
- ZooKeeper学习笔记—配置管理
- kafka整合ldap权限管理
- 用ClusterSSH管理多台Linux服务器(2)
- python 获取json后 dict列表形式输出结果
- ITIL4服务管理的新思路与实践案例介绍
- SEFS安全透明加密内核
- Python Intro - xrange obsoleted by Python3
- 无线信号不好,如何进行扩展?(中继、桥接、WDS、PLC)
- 数据结构-栈详解(大概)
- 【DBeaver】安装与使用教程
- 肖sir__面试就业课___数据库
- 大唐:我家阁楼通公主府(二)
- dos 命令——切换盘符与切换工作目录
- oracle上亿数据的删除
- 为什么《自己动手设计物联网》 和《全栈应用开发》一样也打了 4.9 折??
- 基于STC8的红外遥控灯
- 解决win10系统搜索、网络连接按钮无法使用以及windows无法访问指定设备、路径或文件缺少权限的问题
热门文章
- Python数据挖掘和机器学习
- 字符串string 、byte[]、MemoryStream、Base64String的相互转换
- Linux下部署ASP.NET服务连接oracle遇到的问题记录
- 提升安全性WindowsXP必禁的十大服务
- javascript中数据访问性能优化简析
- 用纯css3和html实现一些复杂的泡沫对话框
- vant-联系人卡片
- JavaScript算法(实例十)回文数 / 立方根 / 进制转化
- Object(包装对象)
- 前端动态获取servlet虚拟路径_Day40_Servletamp;HTTPamp;Request