Dubbo 源码剖析与实战
何辉
平安壹钱包架构师
4711 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 33 讲
开篇词 (1讲)
Dubbo 源码剖析与实战
15
15
1.0x
00:00/00:00
登录|注册

06|事件通知:一招打败各种神乎其神的回调事件

你好,我是何辉。今天我们探索 Dubbo 框架的第五道特色风味,事件通知。
如果你用过 Spring 的 Event 事件,想必对事件通知不陌生,我们看个项目例子回顾一下,比如有个支付系统提供了一个商品支付功能:
图中的支付系统暴露了一个支付请求的 Dubbo 接口,支付核心业务逻辑是调用核心支付系统完成,当支付状态翻转为支付成功后,还需要额外做些事情,比如埋点商品信息、短信告知用户和通知物流派件。
面对这样一个完成核心功能后还需要额外处理多个事件的需求,你会怎么优雅地快速处理呢?

面向过程编程

商品支付成功后需要处理三件事(埋点、发短信、通知物流),这样的需求,你一定觉得简直太小儿科了,从上到下写就完事了。实现体逻辑就是图中线性的形式:
@DubboService
@Component
public class PayFacadeImpl implements PayFacade {
// 商品支付功能:一个大方法
@Override
public PayResp recvPay(PayReq req){
// 支付核心业务逻辑处理
此处省略若干行代码
// 埋点已支付的商品信息
此处省略若干行代码
// 发送支付成功短信给用户
此处省略若干行代码
// 通知物流派件
此处省略若干行代码
// 返回支付结果
return buildSuccResp();
}
}
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文重点介绍了Dubbo框架的事件通知机制,并通过实例展示了如何优雅地处理支付系统中完成核心功能后需要额外处理多个事件的需求。文章首先介绍了面向过程编程的方式,然后提出了面向对象编程的思路,将大方法拆分成小方法,以提高代码的可读性和维护性。接着,文章讨论了如何进一步改造代码逻辑,提出了解耦的小技巧,通过功能相关性、密切相关性和状态变更性的分析,将核心逻辑与事件进行剥离,实现了代码的解耦。这种解耦技巧能够帮助开发人员在实际开发过程中更好地应对复杂的需求,提升代码的灵活性和可维护性。文章还介绍了Dubbo框架中如何利用AOP思想和反射调用实现事件通知机制,为读者提供了一套简单而有效的解决方案。除此之外,文章还介绍了事件通知的应用场景和6W分析模型,以及常用的事件回调机制。通过实际案例和技术讨论,本文向读者展示了如何通过事件通知来优雅地处理复杂的业务逻辑,提升代码设计的水平和质量。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Dubbo 源码剖析与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • 大大大熊myeh
    老师讲解的 Dubbo 事件通知方案好像跟面向过程编程的流程没啥两样,只不过是把若干事件的调用时机转移到了 Dubbo 提供的模板方法中,并且从流程图上来看还是同步调用的吧? 个人觉得只是在可读性上有所增强,具体生产上是否有 dubbo 事件通知相关的应用案例呢?

    作者回复: 你好,大大大熊myeh:文章中的例子只是一种引导,大多数实际业务编码时,几乎会很少使用事件通知机制,主要是这些功能都是一些偏业务层面的东西,开发人员会比较倾向于自主控制逻辑走向。 而放在事件通知里面处理的,反而是一些偏技术属性的功能,这些偏技术属性的功能正好可以和业务功能撇清界限,技术功能报错了就报错了,不要求十分精准,能被触发调用到就行了。

    2023-02-06归属地:浙江
  • hello
    虽然埋点、发短信、通知物流三个事件转移到了 EventNotifyServiceImpl.onReturn 方法中了,如果后续继续增加 发邮件 啥的功能还是会出现同样的问题。当然,这篇文章站在分析问题的角度解读源码就另当别论了。

    作者回复: 你好,hello:是滴,能看出你已经有了自己独有的理解想法了,这里是通过引出案例分析解耦理解源码思想而已。

    2023-01-29归属地:广东
  • 熊猫
    老师,你好,怎么解决当dubbo服务调用返回的对象中有枚举类型,当枚举类型变更时,报错的问题?

    作者回复: 你好,熊猫:我有点没太理解,当枚举值变更时,是消费方判断报文的值不在自己的范围内么?还是哪种情况?

    2022-12-30归属地:广东
    3
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部