Dubbo中的事件通知

本文是关于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源码剖析与实战》学习笔记 Day3

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Provider 暴露服务方称之为“服务提供者”。 Consumer 调用远程服务方称之为“服务消费者”。 Registry 服务注册与发现的心目录服务称之为“服务注册心”。 Monitor 统计服务的调用次数和调用时间的日志服务称之为“服务监控心”。 (1) 连通性: 注册心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册心交互,注册心不转发请求,压力较小 监控心负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控心服务器,并以报表展示 服务提供者向注册心注册其提供的服务,并汇报调用时间到监控心,此时间不包含网络开销 服务消费者向注册心获取服务提供者地址列表,并根据负载算法直接调用提供者,同时汇报调用时间到监控心,此时间包含网络开销 注册心,服务提供者,服务消费者三者之间均为长连接,监控心除外 注册心通过长连接感知服务提供者的存在,服务提供者宕机,注册心将立即推送事件通知消费者 注册心和监控心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表 注册心和监控心都是可选的,服务消费者可以直连服务提供者 (2) 健壮性: 监控心宕掉不影响使用,只是丢失部分采样数据 数据库宕掉后,注册心仍能通过缓存提供服务列表查询,但不能注册新服务 注册心对等集群,任意一台宕掉后,将自动切换到另一台 注册心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯 服务提供者无状态,任意一台宕掉后,不影响使用 服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复 (3) 伸缩性: 注册心为对等集群,可动态增加机器部署实例,所有客户端将自动发现新的注册心 服务提供者无状态,可动态增加机器部署实例,注册心将推送新的服务提供者信息给消费者

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

故里学Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值