3.1 分布式通信
常见通信协议有对象访问协议SOAP、超文本传输协议HTTP、远程过程调用协议RPC、传输控制协议TCP、开放式系统互联协议UDP和全双工通信协议WebSocket。其中,Spring Cloud使用HTTP。
为了使应用程序的编程更加简捷,一些基于协议上的应用级工具与框架应运而生,如HttpClient、OKHttp、CXF、Netty和Mina,即不需要直接操纵协议就可以调用其他应用程序提供的服务,以此达到通信的目的。通常通信都需要相应的通信地址,分布式通信是指多个工程在同一个注册中心进行注册后,通过注册中心获得其他工程的通信地址,彼此进行远程服务的调用与访问。
3.1.1 Spring Cloud Feign
Spring Cloud Feign是声明式REST风格调用工具,它使编写Web服务客户端更容易。微服务工程可以直接通过Spring Cloud Feign的相关注解对HTTP接口进行调用。被调用的HTTP接口不需要任何额外的注解修饰,如@RestController或@Controller。
Spring Cloud Feign集成了Ribbon,提供了一个负载平衡的HTTP客户端。Spring Cloud Feign支持可插拔的编码器和解码器,可以自定编码及解码格式。Spring Cloud Feign底层默认基于Java自带的UrlOpenConnection进行调用,不需要额外依赖其他工程,并且允许更改Spring Cloud Feign的调用方式,如将Java自带的UrlOpenConnection改成HttpClient等第三方工具。
3.1.2 Swagger
在通信前,程序员A可能不知道程序员B写的微服务接口名、接口入参、接口返回参数等。不可能让每个程序员将每个微服务全看一遍,因此使用Swagger工具制作在线API,并允许程序员A直接在Swagger UI上测试,节省了程序员B给程序员A制作Word文档或口述等的时间。
Swagger可以生成在线文档,为用户和企业简化了API的开发,将接口可视化,并设置了相关的开源工具集。在Swagger的在线API生成过程中,只需要输出几行代码,就可以让用户直接使用API,并通过在线API直接调用程序进行测试。Swagger的工具集含有API治理、API检测、API的模拟与虚拟化、API测试、在线API文档、离线API文档、API设计等。
在微服务的分布式构建过程和多个微服务进行通信的过程中,如果利用Word文档告知彼此的入参、接口名、返回参数等相关内容,很容易出现版本不一致或出错的情况。虽然Spring docs可以生成离线文档,但是过程烦琐,而且每次更新都需要手动更新,文档重新传输。因此微服务的分布式构建通常利用Swagger作为解决方案。