当前位置:网站首页 > 技术博客 > 正文

java订阅websocket



Table of Contents

EventBus 是 Guava 的事件处理机制,是观察者模式(生产/消费模型)的一种实现。

观察者模式在我们日常开发中使用非常广泛,例如在订单系统中,订单状态或者物流信息的变更会向用户发送APP推送、短信、通知卖家、买家等等;审批系统中,审批单的流程流转会通知发起审批用户、审批的领导等等。

Observer模式也是 JDK 中自带就支持的,其在 1.0 版本就已经存在 Observer,不过随着 Java 版本的飞速升级,其使用方式一直没有变化,许多程序库提供了更加简单的实现,例如 Guava EventBus、RxJava、EventBus 等

EventBus 优点

缺点

如果需要分布式使用还是需要使用

Gradle

Maven

引入依赖后,这里我们主要使用 类进行操作,其提供了 、、 来进行注册订阅、取消订阅和发布消息

1. 首先创建一个 EventBus

2. 创建一个订阅者

在 Guava EventBus 中,是根据参数类型进行订阅,每个订阅的方法只能由一个参数,同时需要使用 标识

3. 注册到 EventBus 上并发布消息

运行结果为

根据需要我们可以创建多个订阅者完成订阅信息,同时如果一个类型存在多个订阅者,则所有订阅方法都会执行

为什么说这么做是同步的呢?

Guava Event 实际上是使用线程池来处理订阅消息的,通过源码可以看出,当我们使用默认的构造方法创建 的时候,其中 为 ,其具体实现中直接调用的 方法,使其仍然在同一个线程中执行,所以默认操作仍然是同步的,这种处理方法也有适用的地方,这样既可以解耦也可以让方法在同一个线程中执行获取同线程中的便利,比如事务的处理

EventBus 部分源码

DirectExecutor 部分源码

通过上面的源码,可以看出只要将构造方法中的 executor 换成一个线程池实现即可, 同时 Guava EventBus 为了简化操作,提供了一个简化的方案即

这样即可实现异步使用

AsyncEventBus 源码

如果处理时发生异常应该如何处理? 在看源码中,无论是 还是 都可传入自定义的 该 handler 当出现异常时会被调用,我可可以从参数 获取异常信息,从 中获取消息信息进行特定的处理

其接口声明为

在上面的基础上,我们可以定义一些消息类型来实现不同消息的监听和处理,通过实现 来处理异常的情况,无论时同步还是异步都能游刃有余

版权声明


相关文章:

  • pyqt5快速入门2025-07-12 15:00:59
  • utf8mb4与utf8的区别2025-07-12 15:00:59
  • css字体font-family2025-07-12 15:00:59
  • linux开启kdump服务命令2025-07-12 15:00:59
  • ce认证机构28342025-07-12 15:00:59
  • python离线安装第三方库2025-07-12 15:00:59
  • 虚拟机win10开发环境2025-07-12 15:00:59
  • 拦截器(Spring Boot拦截器:精细化控制请求与响应)2025-07-12 15:00:59
  • ernie命名实体识别2025-07-12 15:00:59
  • log4net教程2025-07-12 15:00:59