《Dubbo源码剖析与实战》学习笔记 Day3

本文是关于Dubbo中事件通知的笔记。

事件通知的应用

事件通知在我们日常开发中,有哪些应用场景:

第一,职责分离,可以按照功能相关性剥离开,让各自的逻辑都是内聚的、职责分明的。

第二,解耦,把复杂的面向过程风格的一坨代码分离,可以按照功能是技术属性还是业务属性剥离。

第三,事件溯源,针对一些事件的业务实现,如果遇到未知异常后再想继续尝试重新执行的话,可以考虑事件持久化并支持在一定时间内重新放回执行。

实现思路

  • 创建一个服务类EventNotifyServiceImpl,里面定义了onInvoke、onReturn、onThrow三个时间通知机制的方法
  • 按照FutureFilter的规定, 定义好EventNotifyServiceImpl中三个方法的入参。
  • 在 demoRemoteFacade 字段修饰的 @DubboReference 注解上添加事件通知的 @Method 相关属性配置。
  • 将需要解耦剥离的业务处理放在onReturn中处理。

主要实现原理

主要是利用Dubbo源码中的FutureFilter过滤器,FutureFilter主要做了三件事:

  • 在 invoker.invoke(invocation) 方法之前,利用 fireInvokeCallback 方法反射调用了接口配置中指定服务中的 onInvoke 方法。
  • 然后在 onResponse 响应时,处理了正常返回和异常返回的逻辑,分别调用了接口配置中指定服务中的 onReturn、onThrow 方法。
  • 最后在 onError 框架异常后,调用了接口配置中指定服务中的 onThrow 方法。

6W分析模型要素:

  • Who:谁产生的事件,是功能本身业务实现体产生,还是功能归属源码框架来产生。
  • What:产生什么功能的事件,事件数据对象包含业务信息和事件凭证信息。
  • When:什么时候发生的事件,在业务发生之前、业务发生之后,还是业务发生异常时发布事件。
  • Where:是在哪个系统、哪个功能、哪段代码位置发生的。
  • Why:解决某一类或某一系列的问题,提供一种扩展机制来丰富事件价值。
  • How:怎么发布事件,是自研框架,还是扩展已有框架中具有拦截或过滤特性的机制。

学习来源:极客时间

你可能感兴趣的:(学习笔记,dubbo,java,事件通知)