首页 > 其他分享 >Guava - EventBus(事件总线)

Guava - EventBus(事件总线)

时间:2022-12-03 23:31:40浏览次数:60  
标签:接收器 总线 System println EventBus Guava eventBus out


EventBus 是Google.Guava提供的消息发布-订阅类库,它实现了观察者设计模式,消息通知负责人通过EventBus去注册/注销观察者,最后由消息通知负责人给观察者发布消息。

 

实战编码

下面将以EventBus为例,AsyncEventBus使用方式与其一致的。

定义观察者

public class Observers {

public static class TextObserver {
@Subscribe
public void register(String text) {
System.out.println(MessageFormat.format("文本接收器接收到的内容=[{0}]", text));
}
}


public static class NumberObserver {
@Subscribe
public void register(Number number) {
System.out.println(MessageFormat.format("数字接收器接收到的内容=[{0}]", number));
}

@Subscribe
public void register(Integer number) {
System.out.println(MessageFormat.format("整型数字接收器接收到的内容=[{0}]", number));
}

@Subscribe
public void register(Long number) {
System.out.println(MessageFormat.format("长整型数字接收器接收到的内容=[{0}]", number));
}
}

}

程序验证

public class AnswerApp {
private static EventBus eventBus = new EventBus("事件总线");
private static Observers.TextObserver textObserver = new Observers.TextObserver();
private static Observers.NumberObserver numberObserver = new Observers.NumberObserver();

// 注册观察者接收器
static {
eventBus.register(textObserver);
eventBus.register(numberObserver);
}


public static void main(String[] args) throws Exception {
System.out.println(eventBus.identifier());
System.out.println();

eventBus.post("AnswerAIL");
eventBus.post(100);
eventBus.post(150L);
System.out.println();

System.out.println("休眠3秒...");
Thread.sleep(3000);
// 注销 数字接收器
eventBus.unregister(numberObserver);
System.out.println();

eventBus.post("AnswerAIL");
eventBus.post(100);
eventBus.post(150L);
}

}

运行结果输出

事件总线

文本接收器接收到的内容=[AnswerAIL]
整型数字接收器接收到的内容=[100]
数字接收器接收到的内容=[100]
长整型数字接收器接收到的内容=[150]
数字接收器接收到的内容=[150]

休眠3秒...

文本接收器接收到的内容=[AnswerAIL]

 

EventBus的使用注意问题

  • 代码可读性很差,项目中使用的时候,从post的地方,查询handle使用,都是使用ide的搜索服务,问题很难定位,不如普通的接口调用方便查询
  • 由于EventBus是将消息队列放入到内存中的,listener消费这个消息队列,故系统重启之后,保存或者堆积在队列中的消息丢失

 

参考网址


标签:接收器,总线,System,println,EventBus,Guava,eventBus,out
From: https://blog.51cto.com/u_15891990/5908833

相关文章

  • guava异步增强-ListenableFuture
    jdk原生的future已经提供了异步操作,但是不能直接回调。guava对future进行了增强,核心接口就是ListenableFuture。如果已经开始使用了jdk8,可以直接学习使用原生的CompletableF......
  • 车载测试系列:CAN总线渗透测试
    随着汽车智能化、网联化的高速发展,对于汽车通讯网络的安全威胁越来越多,而CAN总线是目前汽车使用最广泛的总线之一,因此对汽车CAN总线网络安全威胁进行渗透测试、挖掘潜在漏......
  • 车载测试系列:CAN总线错误及故障处理
    CAN五种错误检测机制一、基于信息流级别的错误检测1、CRC校验错误15位的CRC通过发送端根据发送信息的内容计算产生接收端根据接收内容重新计算CRC并于发送端发送过来......
  • 重试机制的实现(Guava Retry)
    重试机制的实现重试作用:对于重试是有场景限制的,参数校验不合法、写操作等(要考虑写是否幂等)都不适合重试。远程调用超时、网络突然中断可以重试。外部RPC调用,或者数据......
  • #盲盒+码# #跟着小白一起学鸿蒙#简析OpenHarmony软总线能力
    作者:王石分布式软总线是OpenHarmony的重要能力,设计目标是实现多设备间的通信方式。分布式软总线是分布式硬件和分布式软总线的重要基础,分布式软总线提供一种不区分链路的设......
  • MASA Framework 事件总线 - 跨进程事件总线
    概述跨进程事件总线允许发布和订阅跨服务传输的消息,服务的发布与订阅不在同一个进程中在MasaFramework中,跨进程总线事件提供了一个可以被开箱即用的程序Integrati......
  • CAN总线学习
    一,CAN总线框架   ......
  • Chiplet-4D毫米波雷达-总线互联IP分析
    Chiplet-4D毫米波雷达-总线互联IP分析自研4D毫米波雷达+前融合感知算法复睿智行自动驾驶破局之道   自动驾驶的未来究竟是纯视觉还是融合感知,今天早已没有悬念。即......
  • #yyds干货盘点#Eventbus数据更新
    全局注册在newVue的时候需要对我们的eventbus进行挂载,挂载方式如下,newvue中包含了需要用到的方法,eventbus的注册需要在beforeCreate钩子中进行实例化,在这里我们的对eventbus......
  • 关于IIC总线上的毛刺?
    实际工程应用中,我们发现,用示波器测量IIC信号会发现总会有一些毛刺,而且仔细观察还可以发现这个毛刺是周期性的,这是为什么呢?如图:我们知道IIC是一种总线协议,如下:之所以......