Dubbo3的Triple协议踩坑记录
Triple协议踩坑记录
Triple协议
Triple 协议是 Dubbo3 提出的基于 HTTP2 + gRPC 的开放协议,完整兼容 gRPC over HTTP/2,旨在解决 Dubbo2 私有协议带来的互通性问题。一句话概括 Triple:它是基于 HTTP/2 上构建的 RPC 协议,完全兼容 gRPC,并在此基础上扩展出了更丰富的语义。
相比于原有 Dubbo2 协议,Triple 有以下优势:
原生和 gRPC 协议互通。打通 gRPC 生态,降低从 gRPC 至 Dubbo 的迁移成本。
增强多语言生态。避免因 CPP/C#/RUST 等语言的 Dubbo SDK 能力不足导致业务难以选型适配的问题。
网关友好。网关无需参与序列化,方便用户从传统的 HTTP 转泛化 Dubbo 调用网关升级至开源或云厂商的 Ingress 方案。
完善的异步和流式支持。带来从底层协议到上层业务的性能提升,易于构建全链路异步以及严格保证消息顺序的流式服务。
目前 Java 和 Go 的 Dubbo SDK 已全面支持 Triple 协议。在阿里巴巴,Triple 协议广泛用于跨环境、跨语言、跨生态互通,已有数十万容器生产级使用。
Java SDK 支持 IDL 生成 Stub 和 Java Interface 两种方式,多语言、生态互通、流式需求推荐使用 IDL 方式,现有服务平滑升级推荐使用 Interface 方式。
坑一、consumer端调用provider端调用失败
在应用triple协议时,在测试环境同一台机器部署了provider和consumer,注册到同一个nacos,但是consumer始终调用不到provider,排查后发现因为测试环境加了http_proxy
和https_proxy
代理
export http_proxy=http://10.126.138.71:3128
export https_proxy=http://10.126.138.71:3128
为什么服务器上加了http代理会导致dubbo服务调用不通呢?
原因是因为triple协议本身,triple协议是基于HTTP2和gRPC协议扩展的,故使用Triple协议时如果加了代理,会受代理影响。
解决办法
通过在服务器上配置no_proxy
来屏蔽内网代理,配置指定IP或者全部内网IP
配置指定IP
export no_proxy="127.0.0.1, localhost, *.cnn.com, 192.168.1.10"
配置所有内网IP
export no_proxy="`echo 10.1.{1..255}.{1..254},` 10.1.255.255"
no_proxy配置参考
坑二、triple协议在docker用应用
在讲dubbo服务build成docker镜像部署应用时,由于docker的隔离特性,consumer端与provider端大都不在同一个局域网内,以至于consumer端provider端无法正常的通信
在dubbo2中,通常在docker镜像启动时通过配置docker环境变量DUBBO_IP_TO_REGISTRY
和DUBBO_PORT_TO_REGISTRY
绑定当前宿主机的IP和端口,通过宿主机的端口暴露注册provider服务
DUBBO_IP_TO_REGISTRY=172.16.0.1 # 当前服务以此IP注册到注册中心
DUBBO_PORT_TO_REGISTRY=20981 # 当前服务以此端口注册到注册中心
但是在使用Triple协议时,使用这两个配置不能完全解决问题,原因是因为dubbo3中元数据和服务使用了不同的端口,以至于DUBBO_PORT_TO_REGISTRY
注册的端口不能满足,因此需要暴露两个端口,此时则不可使用此环境变量DUBBO_PORT_TO_REGISTRY
指定端口(这是官方的一个bug,后续版本应该会修复)
解决办法
dubbo.application.metadata-service-port=20982 # 指定元数据端口
dubbo.protocol.port=50052 # 指定服务端口
并将指定好的端口映射到宿主机上
以docker-compose配置为例,完整配置如下
以上阐述均基于dubbo3.0.8版本
Dubbo3的Triple协议踩坑记录相关推荐
- Smb协议实现内网共享目录文件处理及踩坑记录
Smb协议实现内网共享目录文件处理及踩坑记录 一.业务场景 公司内网环境,有部分比较古老的业务数据保存在一台windows服务器的共享目录里面.现在需要操作这个windows服务器的共享目录来上传下载 ...
- 日常踩坑记录-汇总版
开发踩坑记录,不定时更新 心得 RTFM 严谨的去思考问题,处理问题 严格要求自己的代码编写习惯与风格 注意 单词拼写 20200207 mybatis plus 自带insert插入异常 sql i ...
- AirSim学习和踩坑记录(不定时更新)
版权声明:本文为博主原创文章,遵循Creative Commons - Attribution-ShareAlike 4.0 International - CC BY-SA 4.0版权协议,转载请附 ...
- Nvidia Jetson TX2 详细刷机教程及踩坑记录(Jetpack3.3,python2.7,torch1.2,torchvision0.2.2)
本文总结了自带系统安装cuda等深度学习环境和使用jetpack3.3刷机的步骤,虽然自己的代码没用上,但有需要的人可以参考一下. PS:Jetpack4.5的刷机教程请移步另一篇文章: xyl-50 ...
- 几乎完美安装! NVIDIA Jetson Nano B01 Ubuntu 18.04.3 LTS 的 ROS 安装和菜鸟的踩坑记录【会继续完善】
几乎完美安装! NVIDIA Jetson Nano B01 Ubuntu 18.04.3 LTS 的 ROS 安装和菜鸟的踩坑记录 NVIDIA Jetson Nano B01技术规格 Ubuntu ...
- 树莓派3B+踩坑记录:一、安装Ubuntu Mate
树莓派3B+踩坑记录:一.安装Ubuntu Mate 2020-07-27 05:44:15 来源:互联网 分类:相关文章 树莓派3B+踩坑记录:一.安装Ubuntu Mate 树莓派,Ubuntu, ...
- 为Jupyter notebook配置R kernel过程及踩坑记录
为Jupyter notebook配置R kernel过程及踩坑记录 注意:本文为作者安装过程及折腾的过程,内容比较冗杂,如果读者想直接创建一个属于自己的子环境则参考: 如下文章: anaconda下 ...
- Python打包工具Pyintealler打包py文件为windows exe文件过程及踩坑记录+实战例子
Python打包工具Pyintealler打包py文件为windows exe文件过程及踩坑记录+实战例子 目录 Python打包工具Pyintealler打包py文件为windows exe文件过程 ...
- TVM: Deep Learning模型的优化编译器(强烈推荐, 附踩坑记录)
本文作者是阿莱克西斯,原载于知乎,雷锋网(公众号:雷锋网)获得授权转载. (前排提醒,本文的人文内容部分稍稍带有艺术加工,请保持一定的幽默感进行阅读) 关注我最近想法的同学应该知道我最近都在把玩 TV ...
最新文章
- iOS开发指南 从Hello World到App Store上架 第5版
- R语言使用ggplot2包的快速可视化函数qplot绘制散点图(设置数据点的形状、大小)实战
- 判断 小程序 是否 滚动到页面底部 scrolltolower_微信小程序长列表性能优化——recycle-view
- Sharepoin学习笔记—架构系列--08 Sharepoint的数据模型(DataModel)、数据管理(Data Management)与查询(Query System)
- 设置 sideload Outlook Add-ins
- less文件的样式无法生效的一个原因,通过WEB浏览器访问服务器less文件地址返回404错误...
- vue导出Excel
- 药品数据查询系统工具(非付费官网50个)
- 自建电驴服务器,电驴服务器怎么连接 eMule连接服务器教程
- linux 一键网克,MaxDos8下载一键Ghost|迈思工作室MaxDos工具箱下载 v8.0 官方版_最火软件站...
- HTML中如何使用JavaScript创建链接?
- Python values()函数用法
- TLF(TextFlow) 总结-FLEX
- 游戏私服频繁被DDOS攻击怎么办
- pandas - 股票K线数据重采样
- 央视春晚歌手王琪,和戏歌双绝吴广全在长春芝华仕会盟
- 【摄影技术基础】图像处理之图像采集
- SPSS数据类型学习
- 利用Google Analytics追踪关键词排名
- 如何判断鼠标按下的是左键还是右键