首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >dubbo-http 协议小探和修改尝试

dubbo-http 协议小探和修改尝试

原创
作者头像
鲍远林
修改2020-06-17 10:34:20
1.6K0
修改2020-06-17 10:34:20
举报
文章被收录于专栏:泛互云原生泛互云原生

1. Dubbo-http 底层探究


最近在研究如何让用户的 dubbo 代码最小改动的迁移到 http 协议上,看了很多实现都要做很多改动,用户不友好。于是看了下 github 发现最新的 dubbo 已支持了 dubbo-http rpc。开始以为用的是 HttpClient 做的封装,实际上是采用了 jsonrpc4j 这个库。

jsonrpc4j 有个核心类 JsonRpcHttpClient 负责执行远程调用,类似HttpClient。dubbo-consumer 在初始化时,生成 Invoker 时,在 JsonProxyFactoryBean 的 afterPropertiesSet 方法中生成 JsonRpcHttpClient 实例。

上面截图是临时撸码写的 dubbo-bookinfo-demo,运行demo中的 ProviderApplication 和 ConsumerApplication,抓包检查确实是 http 方式,而且 application 标注的是 json-rpc。

2. 使用服务名发送 http 请求


虽然 dubbo-http 让 dubbo 支持了 http 协议,但请求的 url 中使用的任然是 provider 实例的 ip,并不是服务名。这点显然满足不了 envoy 的要求。为此试着修改 dubbo sdk,尝试让 dubbo 发出的请求 url 使用服务名(provider 的 application name)。

具体修改方式见上图,在 protocolBindingRefer 方法中改写 url,将 host 字段设置为 provider 的 application name。然后重新打包运行,抓包查看果然发出的请求中使用了服务名。

Note: 需要在 hosts 文件中加个配置,才能将 bookinfo-provider 解析成真正的 IP,否则服务是跑步起来的。

3. 项目转成 dubbo-http 涉及的改动


虽然 dubbo-bookinfo-demo 代码很简单,但跑起来还是遇到不少坑,maven 依赖确实很烦,而且官方这方面的文档也不健全。现在回过头来看,一个采用dubbo默认协议,或者非 dubbo-http 方式的项目转到 dubbo-http rpc 协议需要做如下几方面改动:

  • 不需要改动 java 代码
  • 依赖包需要添加

下面罗列的依赖,除了 tomcat 其它都是必须的。tomcat 可以 换成 jetty。完整的依赖,请见项目的 parent pom, provider pomconsumer pom

    dubbo-rpc-http
    dubbo-remoting-http
    javax.servlet-api
    tomcat-embed-core
    spring-web
    jsonrpc4j
  • dubbo-spring 配置

provider 有两点需要改动,一个是协议,一个服务暴露出配置下 http 协议,见下图。consumer 端不需要改动配置。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Dubbo-http 底层探究
  • 2. 使用服务名发送 http 请求
  • 3. 项目转成 dubbo-http 涉及的改动
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档