guava在还没做分布式处理上,单机单整合上大行其道。...所以guava在程序性能优化上下了不少的工夫,我们称其为单块架构的利器 我认为强大的有几点:1.集合处理 2.EventBus消息总线处理 3.guava cache 单机缓存处理 4.并发listenableFutrue...反射[Reflection] Guava 的 Java 反射机制工具类 1.Guava EventBus探讨 在设计模式中, 有一种叫做发布/订阅模式, 即某事件被发布, 订阅该事件的角色将自动更新。...如何实现 先来讲同步, 即订阅者收到事件后依次执行, 下面都是伪代码, 具体的入库细节等我在这里不提供。...:在多线程运算中可能或者可能在没有结束返回结果,Future是运行中的多线程的一个引用句柄,确保在服务执行返回一个Result。
异常处理 总结 参考 --- 前言 EventBus 是 Guava 的事件处理机制,是观察者模式(生产/消费模型)的一种实现。...Observer模式也是 JDK 中自带就支持的,其在 1.0 版本就已经存在 Observer,不过随着 Java 版本的飞速升级,其使用方式一直没有变化,许多程序库提供了更加简单的实现,例如 Guava...(1); eventBus.post(2); eventBus.post("3"); 运行结果为 EventListener#listenInteger ->1 EventListener#listenInteger...异常处理 如果处理时发生异常应该如何处理?...exception 获取异常信息,从 context 中获取消息信息进行特定的处理 其接口声明为 public interface SubscriberExceptionHandler { /**
本篇博客将深入探讨 Java 中的异步和事件驱动编程概念,并通过实际示例展示如何应用这些技术。Java 中的异步编程1....Callable 和 Future:相比 Runnable,Callable 可以返回结果,Future 提供了一种检查计算是否完成的方式,并能获取结果。2....使用 CompletableFutureCompletableFuture:一个更加强大的异步编程工具,支持流水线执行任务,异常处理和结果合并。...使用事件总线事件总线框架:如 Google Guava 的 EventBus,允许发布和订阅事件,简化事件驱动架构的实现。...通过利用 CompletableFuture 和事件总线,开发者可以有效地处理并发任务和响应系统事件,从而提高应用程序的性能和用户体验。
如何在应用程序中调用CMD并返回运行结果 要求做一个图形界面的应用程序,输入命令行的命令,在后台调用CMD程序执行该命令但不显示DOS命令行窗口,而且能实时显示运行的结果。哪位知道怎么处理?
1前言 平时我们都会封装一些处理缓存或其他的小工具。但每个人都封装一次,重复造轮子,有点费时间。有没有一些好的工具库推荐-guava。...BiMap Table(表) Sets和Maps(交并差) EventBus(事件) StopWatch(秒表) Files(文件操作) RateLimiter(限流器) Guava Retry(重试...------------- {c=3} {b=(2, 20)} {a=1} {d=4} 8EventBus EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)...对于事件监听和发布订阅模式 EventBus内部实现原理不复杂,EventBus内部会维护一个Multimap exceptionPredicate) 对异常判断,是否重试 retryIfResult(Predicate resultPredicate) 对返回结果判断
注册 先贴出注册代码, 可以可到和 Guava 相比没什么大的区别, 主要的点在内部实现上,一个是如何获取注册信息;一个是如何保存注册关系 /** * Registers the given...我们可以倒推一下这个设计思路: 注册,首先是要确定将类的哪些方法注册到 EventBus 排除掉注解方式;还有一种常见的就是我们定义一种方式,可以将我们需要注册的方法直接返回 定义一个接口,用于返回注册类的所有订阅信息...,然后把这个接口也丢给 EventBus 下面贴一个非注解方式的测试用例,方便理解, SubscriberInfoIndex就是我们定义用于返回所有的订阅关系的接口,通过调用 EventBus.addIndex...subscriber, subscribedEvents); } subscribedEvents.add(eventType); // 这里就是对粘性事件的处理...,这个使用和guava的有些区别,特别是对超类以及作用域的情况处理 非注解方式注册 典型的借用辅助类(SubscriberInfoIndex)来完成预期目标 此外实现的细节上也可以看看,参考优秀的写法才能提高自己的书写质量
观察者设计模式大纲如下: 什么是观察者模式 观察者模式代码如何写 如何使用观察者模式结合业务 Guava EventBus 观察者模式 Spring ApplicationEvent 事件模型 观察者模式最后的总结...这里会分别介绍 Guava#EventBus 以及 Spring#事件模型 同步异步的概念 在介绍 EventBus 和 Spring 事件模型之前,有一道绕不过去的弯,那就是同步执行、异步执行的概念,...总结一句话就是 由调用者主动等待这个调用的结果,未返回之前不执行别的操作 异步执行:而异步执行恰恰相反,发出调用请求后立即返回,并向下执行代码。...一起来看下 Guava 和 Spring 是如何封装观察者模式 Guava EventBus 解析 EventBus 是 Google Guava 提供的消息发布-订阅类库,是设计模式中的观察者模式(生产...Spring 事件与 Guava EventBus 一样,代码就不粘贴了,都已经存放到 Github 代码仓库。
④、ConcreteObserver具体的观察者 每个观察在接收到消息后的处理反应是不同, 各个观察者有自己的处理逻辑。...其中,Google Guava EventBus 就是一个比较著名的 EventBus 框架,它不仅仅支持异步非阻塞模式,同时也支持同步阻塞模式。...https://github.com/google/guava 下面我们以上面的例子来说明如何使用 EventBus: ①、导如 Guava 包 ...(比如,EventBus 中的 post() 函数)来给 Observer 发送消息(在 EventBus 中消息被称作事件 event)。...②、事件多级触发场景。 ③、跨系统的消息交换场景, 如消息队列的处理机制。
这显然返回了 开闭原则。 解决上诉问题的方法很简单,就是使用 领域事件。 领域事件很好理解,说白了就是与领域相关的事件。事件的产生往往伴随着相应的动作,例如上面所提到的回复动作。...有了领域事件,每个领域本身就只需要关系其自己的业务逻辑,并在处理完自身逻辑的同时抛出相应的领域事件。对这些领域事件感兴趣的业务方可以 订阅该事件,然后进行后续的处理。...例如 Spring中的事件, Guava中的 EventBus都是很好的实践。直接采用这些工具会有两个问题: 无法灵活的处理同步事件和异步事件。...我推荐在 guava的 EventBus上面进行封装,因为它已经实现了同步和异步的模式,并且使用注解的订阅方式对程序员也十分友好。 首先,我们需要定义一个 领域事件的抽象基类。 ?...publish(T event) 同步发布事件接口 asyncPublish(T event) 异步发布事件接口 同时,我给出了一个基于 Guava的实现,如下: /** * Guava事件发布器实现
EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现,在应用中可以处理一些异步任务。...对于事件监听和发布订阅模式,EventBus是一个非常优雅和简单解决方案,我们不用创建复杂的类和接口层次结构。 ?...DeadEvent 当EventBus发布了一个事件,但是注册的订阅者中没有找到处理该事件的方法,那么EventBus就会把该事件包装成一个DeadEvent事件来重新发布;我们在应用中可以提供如下的事件处理方法来处理...之异常处理 在默认情况下,EventBus不会对异常信息进行处理,异常信息也不会终止EventBus的运行,只会简单的打印出异常堆栈信息。...不会对异常信息进行处理,异常信息也不会终止EventBus的运行,只会简单的打印出异常堆栈信息。
Guava在guava-libraries中为我们提供了事件总线EventBus库,它是事件发布订阅模式的实现,让我们能在领域驱动设计(DDD)中以事件的弱引用本质对我们的模块和领域边界很好的解耦设计。...不再多的废话,直奔Guava EventBus主题。...首先Guava为我们提供了同步事件EventBus和异步实现AsyncEventBus两个事件总线,他们都不是单例的,官方理由是并不想我们我们的使用方式。...("%d from int%n", integer); } } Guava发布的事件默认不会处理线程安全的,但我们可以标注@AllowConcurrentEvents来保证其线程安全 发布 对于事件源...DeadEvent DeadEvent暂时不清楚怎么翻译更合意,它描述的是死亡事件,即没有没任何订阅者关心,没有被处理,以DeadEvent类型参数的方法表示.例如在上例中我们post一个Object类型
routeResult.getSqlStatement().getType(), preparedStatementUnits, getParameters()).executeQuery(); // 对返回的结果进行...,接下来一一分析sharding-jdbc如何实现; 单表查询之路由 接下来分析下面这段代码是如何取得路由信息的: Collection preparedStatementUnits...的EventBus发布BEFORE_EXECUTE的事件(执行完成后,如果执行成功还会发布EXECUTE_SUCCESS事件,如果执行失败发布EXECUTE_FAILURE事件),部分核心源码如下: /...(getExecutionEvent(sqlType, baseStatementUnit, each)); } // 调用google-guava的EventBus.post()提交事件 for (AbstractExecutionEvent...merge,下面的sharding-jdbc源码分析系列文章继续对其进行分析; EventBus 说明:EventBus是google-guava提供的消息发布-订阅类库; google-guava的
Guava EventBus EventBus 是Guava的一个发布订阅的模型,先看一个简单的实现: 定义一个Event的消息传递对象 public class TestEvent1 {...EventBus eventBus = new EventBus("test"); // 2.构造一个事件监听器 EventListener listener = new...EventListener(); // 3.把事件监听器注册到事件总线上 eventBus.register(listener); // 4.事件总线发布事件,触发监听器方法...eventBus.post(new TestEvent1(1)); } 运行结果是: Message:1 如果是多个方法需要调用,只需要在新方法上面加上@Subscribe...lastMessage = event.getMessage(); System.out.println("Message2:"+lastMessage); } 如果想使用异步的方法处理
EventBus 深入学习三之Guava小结 上一篇讲述了 EventBus 的整个执行流程, 本片则从细节处出发,探讨下设计的精妙 巧妙的利用缓存, 解决重复耗时的操作 异步化的操作 队列存储消息,...以及如何避免消息的重复消费 消费的先后顺序 截断 异常处理 1....缓存 看代码时,可以看到很多地方都用到了缓存,如再注册时, 根据class获取所有带注解的方法; 推送消息时,根据事件类型,获取所有的超类集合 如注册时,一条完整的调用链 com.google.common.eventbus.SubscriberRegistry...异常处理 没有订阅者时, 抛一个 DeadEvent 订阅者接收消息后的,执行异常时 (订阅者之间的隔离) 看下具体的执行,比较清晰, 将异常抛给 EventBus的 ExceptionHandler...消费顺序 & 截断 Guava的EventBus不支持定义订阅者的顺序,更谈不上截断
Guava中常用到的工具类学了一遍,感觉有些工具类还是挺有用的,至少它帮你封装了很多功能,让你在处理一些逻辑的时候,不用太关注细节,把Guava的工具类直接拿来用就好了。...查找value,通过value来查找值,也就是需要一个双向Map,如果使用JDK中的Map,我们需要维护两个Map,一个从key映射到value,另外一个从value映射到key,而且不管是新增还是修改...》 7、Guava发布/订阅EventBus EventBus是Guava中实现的用于发布/订阅模式的事件处理组件,它是设计模式中观察者模式的优雅实现 EventBus是消息总线,它会根据消息的类型发送到指定的消息订阅者...,当有消息没有订阅者接收时,会将消息发送给DeadEvent 关于EventBus的详细用法,请查看《Guava系列之EventBus》 ---- 以上是对最近学习Guava类库的一个总结,它包括了我们平常开发中最常用的一些组件工具类...发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/200846.html原文链接:https://javaforall.cn
传统JDK中的Future通过异步的方式计算返回结果:在多线程运算中可能或者可能在没有结束返回结果,Future是运行中的多线程的一个引用句柄,确保在服务执行返回一个Result。...ListenableFuture#get() 当所有任务都成功时,返回所有任务执行结果;当任何一个任务失败时,马上抛出异常,无需等待其他任务执行完成。 为什么会分同步执行和异步执行呢?...* * @param baseStatementUnit 语句对象执行单元 * @return 处理结果 * @throws Exception 执行期异常...Sharding-JDBC 使用 Guava(没错,又是它)的 EventBus 实现了事件的发布和订阅。...例如, #listen() 订阅了 DMLExecutionEvent 事件 EventBus#post() 发布事件,同步调用订阅逻辑 ?
本文主要内容: 介绍观察者模式 微信公众号的发布/订阅示例 观察者模式总结 分析观察者模式的典型应用 JDK 提供的观察者接口中的观察者模式 Guava EventBus 中的观察者模式 JDK 委托事件模型...EventBus 中的观察者模式 Guava 中的 EventBus 封装了友好的 "生产/消费模型",通过非常简单的方式,实现了观察者模式中的监听注册,事件分发。...EventBus 的更多用法可自行查看相关文档 Guava EventBus 源码分析可看这篇 http://t.cn/EZzC35B JDK 委托事件模型DEM中的观察者模式 首先来敲一个AWT...也就是我们实现的匿名事件处理类),实现对事件的处理 动作事件发生 1 次 动作事件发生 2 次 动作事件发生 3 次 动作事件发生 4 次 Spring ApplicationContext 事件机制中的观察者模式...spring的事件机制是从java的事件机制拓展而来,ApplicationContext 中事件处理是由 ApplicationEvent 类和 ApplicationListener 接口来提供的
eventbus主要有以下几部分组成: 1、eventbus、asyncEventBus:事件发送器。 2、event:事件承载单元。...3、事件发送:执行指定事件类型的订阅者(包含了method),从订阅者中获取指定事件的订阅者,然后按照规则(同步、异步)执行指定的方法。 ? 上述代码说明,如果事件没有监听者,就当作死亡事件来对待。...4、EventBus与AsyncEventBus的区别 从字面上看,AsyncEventBus是异步的EventBus,那么EventBus应该就是同步的了。...即如果订阅者方法上有注解AllowConcurrentEvents,则返回Subscriber,否则,返回SynchronizedSubscriber。...2、本文用到的guava版本如下: ? 作者:yangjianzhou https://my.oschina.net/yangjianzhou/blog/2208677 【推荐阅读】
EventBus 深入学习一 EventBus是一个消息总线,以观察者模式实现,用于简化程序的组件、线程通信,可以轻易切换线程、开辟线程; 传统上,Java的进程内事件分发都是通过发布者和订阅者之间的显式注册实现的...,但是设计非常巧妙 从订阅者角度来看,首先是要注册,没什么好说的,关键点就在于接受消息的处理方法上 - 添加一个注解,指定消息接收类型(即参数类型), 就可以接受这类消息 - 基于上面的方法,一个订阅者...事件监听者(Listeners) 即我们上面的订阅者,最终接受事件,并执行响应的业务逻辑的主体 在EventBus实例上调用EventBus.register(Object)方法注册事件监听者;需要注意的是请保证事件生产者和监听者共享相同的...事件生产者(Producers) 发送事件的主体,通过把事件传递给 EventBus.post(Object)方法。异步分发可以直接用EventBus的子类AsyncEventBus。 3....术语 术语 说明 事件 可以向事件总线发布的对象 订阅 向事件总线注册监听者以接受事件的行为 监听者 提供一个处理方法,希望接受和处理事件的对象 处理方法 监听者提供的公共方法,事件总线使用该方法向监听者发送事件
eventbus主要有以下几部分组成: 1、eventbus、asyncEventBus:事件发送器。 2、event:事件承载单元。...3、事件发送:执行指定事件类型的订阅者(包含了method),从订阅者中获取指定事件的订阅者,然后按照规则(同步、异步)执行指定的方法。 ?...4、EventBus与AsyncEventBus的区别 从字面上看,AsyncEventBus是异步的EventBus,那么EventBus应该就是同步的了。...即如果订阅者方法上有注解AllowConcurrentEvents,则返回Subscriber,否则,返回SynchronizedSubscriber。...2、本文用到的guava版本如下: ?
领取专属 10元无门槛券
手把手带您无忧上云