我们提供安全,免费的手游软件下载!
本文分享自华为云社区《Java Chassis 3技术解密:与Spring Cloud的互操作》,作者: liubao68。
Java Chassis 3注重利用架构的韧性设计来解决兼容性问题,使得微服务之间的互操作更加灵活。
例如,引入微服务网关可以解决不同语言、不同框架、遗留系统之间的互操作问题。在本文中,将基于这一架构原则,探讨Java Chassis3在运行时设计依赖上的技术细节。
下面我们描述一个互操作的场景和假设。
从技术原理上梳理上述互操作需要满足的条件:
Service Center
或者
Nacos
作为注册中心,并使用Spring Cloud Huawei实现Spring Cloud注册。
Java Chassis与Spring Cloud的REST调用的部分,主要依赖于契约。Spring Cloud通过FeignClient来声明客户端契约,客户端需要在FeignClient中重复书写REST标签;而Java Chassis有两种契约发现模式:从注册中心发现和从Provider实例发现。Java Chassis3默认采用从Provider实例发现,而Java Chassis2则采用从注册中心发现。从Provider发现的好处在于可以降低对注册中心元数据管理能力的要求,这使得我们既可以选择
Service Center
作为注册中心,也可以选择
Nacos
作为注册中心。
从Provider发现,要求Provider实现以下接口:
它包含一个健康检查接口和一个查询契约的接口。只要Spring Cloud应用实现了上述接口,它就具备了Java Chassis微服务需要的基础特征,这样Java Chassis就可以像访问本框架的微服务一样访问Spring Cloud框架开发的微服务应用。为了简化这一过程,在Spring Cloud中简单实现该接口,该实现接口可以从
export
目录加载符合Open API 3.0规范的契约信息,只需将Spring Cloud需要对外暴露的REST接口的契约文件放到这个目录下。
Java Chassis与Spring Cloud互操作的例子已经放到了ServiceComb Samples中,该例子还提供了使用Nacos作为注册中心和配置中心的实现,只需要将Profile设置为Nacos即可。
客户故事:在架构选型变化的时候,解决功能迁移和兼容性问题是最大的挑战。一些客户在将Spring Cloud应用改造为Java Chassis的过程中,发现一些功能不被支持,比如SseEmitter、WebSocket等。如果选择支持这些能力,Java Chassis需要实现很多Servlet能力,这些能力规划会和微服务技术架构存在冲突。对于这些场景,我们选择通过架构韧性来保留这些功能,比如将提供SseEmitter、WebSocket功能的应用独立出来,采用Spring Boot开发,这些应用可以通过调用Java Chassis微服务的REST接口来实现其特殊功能。通过这种架构韧性的理念,降低了技术持续演进的包袱,为敏捷迭代,持续创新奠定了方向,减少了兼容性问题的争论。
点击关注,第一时间了解华为云新鲜技术~
热门资讯