java接口常见问题分析,常见问题 - 微服务接口兼容常见问题 - 《Apache ServiceComb Java Chassis 用户手册》 - 书栈网 · BookStack...

在进行微服务持续迭代开发的过程中,由于新特性在不停的加入,一些过时的特性在不停的修改,接口兼容问题面临巨大的挑战,特别是在运行环境多版本共存(灰度发布)的情况下。本章节主要描述接口兼容管理的一些实践建议,以及在使用过程中碰到了兼容性问题的解决办法。由于微服务一般都通过REST接口对外提供服务,没有特殊说明的情况下,这里的接口都指REST接口。

保证接口兼容的实践

为了防止接口兼容问题,开发者在进行接口变更(新增、修改、删除等)的时候,建议遵循下面的一些原则。只增加接口,不修改、不删除接口。

作为Provider,增加接口的时候,相应的将微服务版本号递增。比如将2.1.2修改为2.1.3。

作为Consumer,使用Provider的新接口时候,指定Provider的最小版本号。比如:servicecomb.references.[serviceName].version-rule=2.1.3+,其中serviceName为Provider的微服务名称。

在服务中心,定期清理不再使用的老版本的微服务信息。

ServiceComb还有如下一些注意事项:

修改微服务信息,必须升级版本号,因为服务注册的时候,不会覆盖已经注册的微服务信息。

接口兼容常见问题及其解决办法

开发阶段,由于存在频繁的接口修改,也不会清理服务中心的数据,容易出现调试的时候接口调用失败的情况。建议开发者可以安装下载一个服务中心的frontend, 可以随时清理服务中心数据。

如果使用华为公有云在线的服务中心,可以直接登录使用微服务引擎提供的管理功能进行删除。

发布阶段,需要审视下接口兼容的实践的步骤,确保不在线上引入接口兼容问题。

如果不小心漏了其中的某个步骤,则可能导致如下一些接口兼容问题:如果修改、删除接口:导致一些老的Consumer将请求路由到新的Provider,调用失败。

如果忘记修改微服务版本号:导致一些新的Consumer将请求路由到老的Provider,调用失败。

如果忘记配置Consumer的最小依赖版本:当部署顺序为先停止Consumer,再启动Consumer,再停止Provider,再启动Provider的情况,Consumer无法获取到新接口信息,就采用了老接口,当Provider启动以后,Consumer发起对新接口的调用会失败;或者在Provider没启动前,调用新接口失败等。

出现问题的规避措施:出现的接口兼容问题不同,处理方式会有差异。极端情况,只需要清理Provider、Consumer的微服务信息,然后重启微服务即可。当服务调用关系复杂的情况下,接口兼容问题影响范围会更加广泛,同时清理Provider、Consumer数据会变得复杂,因此建议遵循上面的规范,避免不兼容的情况发生。

常见的接口不兼容情况的日志consumer method [Method Name] not exist in swagger

可能是Provider增加了接口,但是没有更新版本号。需要删除微服务数据或者更新版本号后重新启动Provider,并重启Consumer。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值