中间件核心技术与实战
丁威
中通快递资深架构师,RocketMQ 社区首席布道师
19674 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 33 讲
中间件核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

11|案例:如何基于Dubbo进行网关设计?

你好,我是丁威。
这节课我们通过一个真实的业务场景来看看 Dubbo 网关(开放平台)的设计要领。

设计背景

要设计一个网关,我们首先要知道它的设计背景。
2017 年,我从传统行业脱身,正式进入物流行业。说来也非常巧,我当时加入的是公司的网关项目组,主要解决泛化调用与协议转换代码的开发问题。刚进公司不久,网关项目组就遇到了技术难题。快递物流行业的业务量可以比肩互联网,从那时候开始,我的传统技术思维开始向互联网技术思维转变。
当时网关项目组的核心任务就是确保能够快速接入各个电商平台。我来简单说明一下具体的场景。
解释一下上面这个图。
物流公司内部已经基于 Dubbo 构建了订单中心微服务域,其中创建订单接口的定义如下:​
外部电商平台众多,每一家电商平台内部都有自己的标准,并不会遵循统一的标准。例如在淘宝中,当用户购买商品后,淘宝内部会定义一个统一的订单外派接口。它的请求包可能是这样的:
{
"seller_id":189,
"buyer":"dingwei",
"order":[
{
"goods_name":"华为笔记本",
"num":1,
"price":500000
},
{
"goods_name":"华为手表",
"num":1,
"price":200000
}
]
}
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了基于Dubbo进行网关设计的案例。作者通过自身经历,阐述了在物流行业中,网关项目组面临的技术难题和设计背景。主要围绕物流公司内部基于Dubbo构建的订单中心微服务域,以及外部电商平台的不同标准和接口定义展开讨论。作者指出,电商平台的话语权高于快递公司,因此物流公司需要适配不同电商平台的订单派发接口,而不能为每个电商平台开发一套下单服务。文章强调了网关设计的重要性,以及如何利用Dubbo网关来解决电商平台接入的问题,提高系统的可维护性和降低复杂度。整体而言,文章通过实际案例展示了基于Dubbo进行网关设计的技术特点和解决方案,对于想要了解该领域的读者具有一定的参考价值。文章详细介绍了网关设计的需求背景,并给出了设计方案,包括签名验证、服务配置和限流等方面。作者还通过关键代码的解读,深入讲解了Dubbo泛化调用的逻辑,使读者能够理论与实际相结合。此外,文章还提到了转换协议的普适性,以及对读者的课后题建议,鼓励读者通过实现一个demo级的网关设计来检测对知识的掌握程度。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《中间件核心技术与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(6)

  • 最新
  • 精选
  • 放不下荣华富贵
    数字签名部分: 计算完sign再追加时间戳,时间戳就可能篡改,那还是避免不了重放攻击吧?

    作者回复: 对的,数字签名主要还是进行身份验证与防止数据被篡改,重放攻击通常在服务端结合redis等缓存组件,进行处理。

    2022-08-26归属地:上海
    3
    2
  • 雨落~紫竹
    其实这种配置话实体 用起来很灵活 比如我们对接第三方云厂商 就是将 接口传参 请求路径 返回结构 解析结构 鉴权 全部做成了配置话 之后接入其他云厂商 也就只是 配置和联调的工作
    2022-07-09
    1
  • 赤红热血
    根据这些元信息动态构建一个个消费者(服务调用者),进而通过创建的服务调用客户端发起 RPC 远程调用,最终实现网关应用的 Dubbo 服务调用。 1.这句话里面,消费者为啥是服务调用者? 2.啥叫“创建的服务调用客户端发起rpc远程调用”?这句话读的通吗
    2022-07-09
    2
    1
  • 🐝
    如何进行协议转换呢,有什么方案
    2023-03-28归属地:北京
  • fantasyer
    老师,关于网关这块有三个问题想咨询一下 1、验证签名这块提到,时间戳不参与签名验证,为什么时间戳不参与签名验证,我理解时间戳参与签名可以防止时间戳被恶意篡改,进而可以防止交易恶意重复提交 2、代码invokerPams.put("class", "net.codingw.oms.vo.OrderItemVo");中这里的对象是不是应该是net.codingw.oms.vo.OrderVo,整个报文映射的类? 3、网关这部分设计重点讲了网关内部如何通过泛化调用后端的dubbo服务,想咨询下老师,这个案例中网关对外的接口部分是如何设计的?即给不同的电商是如何暴露接口服务的,从而灵活做到基本不用修改、快速扩展支持?
    2022-07-20
    3
  • 公号-技术夜未眠
    如果已经存在对应的 Invoker 对象,为了不影响现有调用,应该先用新的 Invoker 对象去更新缓存,然后再销毁旧的 Invoker 对象。 其中,不影响现有调用,请问如何理解?
    2022-07-12
    1
收起评论
显示
设置
留言
6
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部