Google Guava EventBus使用 Guava是Google开源的一个Java基础类库,它在Google内部被广泛使用。Guava提供了很多功能模块比如:集合、并发库、缓存等,EventBus是其中的一个module,本篇主要讲一下EventBus的使用。 简单介绍 EventBus:核心类,代表了一个事件总线。Publish事件也由它发起。 AsyncEventBus:异步事件总线,在分发...
2.由于EventBus是将消息队列放入到内存中的,listener消费这个消息队列,故系统重启之后,保存或者堆积在队列中的消息丢失。 3.google的guava的个版本之间的兼容性也是一个问题,有时候会导致jar冲突导致服务无法启动。如hive使用的是guava 11.0版本,而公司的内部jar使用的是guava 22.0版本,程序启动时出现了java.lang.NoSuch...
一. EventBus google eventbus并没有强制要求使用单例的EventBus,而是可以自行创建,你可以在一个容器内拥有多个EventBus实例,当然也可以自行将其配置为单例。下面的代码是将EventBus配置成单例的 packagestudy.yan.google.eventbus.demo;importcom.google.common.eventbus.EventBus;publicclassEventBusCenter {privatest...
2. public void shouldReceiveEvent() throws 3. 4. // given 5. new EventBus("test"); 6. new 7. 8. eventBus.register(listener); 9. 10. // when 11. new OurTestEvent(200)); 12. 13. // then 14. 200); 15. } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14....
结论:Google guava中的AsyncEventBus组件默认是同步处理,使用多线程但未设置@AllowConcurrentEvents会出现多线程之间的抢锁情况,导致业务消费kafka消息变慢产生消息积压。 四、解决方案 方案一:去除EventBus这一层,直接使用主线程消费EventBus使用场景一般在有多个订阅者情况下使用,排查业务逻辑过程中业务逻辑只有一个Subscri...
一、写在前面的话,guava的坐标为: version=21.0 groupId=com.google.guava artifactId=guava 整体交互过程见下: guava EventBus.png UML.png 二、登录日志示例实现 这里以登录为示例,讲述异步记录登录日志的事件驱动。 1、定义事件分发器接口 /** * 事件分发器的接口 ...
1.代码可读性很差,项目中使用的时候,从post的地方,查询handle使用,都是使用ide的搜索服务,问题很难定位,不如普通的接口调用方便查询; 2.由于EventBus是将消息队列放入到内存中的,listener消费这个消息队列,故系统重启之后,保存或者堆积在队列中的消息丢失。 3.google的guava的个版本之间的兼容性也是一个问题,有时候...
EventBus是Google.Guava提供的消息发布-订阅类库,它实现了观察者设计模式,消息通知负责人通过EventBus去注册/注销观察者,最后由消息通知负责人给观察者发布消息。 首先使用 maven 依赖: 代码语言:javascript 代码运行次数:0 复制 Cloud Studio代码运行 <!--https://mvnrepository.com/artifact/com.google.guava/guava-...
EventBus 是 Guava 的事件处理机制,是观察者模式(生产/消费模型)的一种实现。 观察者模式在我们日常开发中使用非常广泛,例如在订单系统中,订单状态或者物流信息的变更会向用户发送APP推送、短信、通知卖家、买家等等;审批系统中,审批单的流程流转会通知发起审批用户、审批的领导等等。
在Google Guava 10版本引入了EventBus, 它主要用来简化我们处理生产/消费者编程模型. 基本用法 使用Guava之后, 如果要订阅消息, 就不用再继承指定的接口, 只需要在指定的方法上加上@Subscribe注解即可: public class EventListener { public int lastMessage = 0; ...