CSE作为一个独立的RPC框架实现,可以非常容易集成到Spring Cloud中。通过将Spring RESTful Web Service替换为CSE,可以给开发者带来如下便利:
一致的开发体验。使用CSE的SpringMVC模式,可以获得和Spring RESTful Web Service一致的开发体验,包括一样的声明式Annotation,使用RestTemplate进行访问。
更好的RPC支持。使用CSE,开发者不需要在客户端使用Feign等组件访问服务,可以直接使用RPC访问,非常灵活。
更好的通信性能和协议扩展。
完整的开箱即用的服务治理、监控、调用链等功能。达到一键式启用的目的。
本章节仍然基于快速接入的示例,展示改造的步骤,以及改造以后的效果。点击下载地址获取改造后的项目。
集成方式
CSE支持如下几种集成方式,当需要和Spring Cloud集成的时候,CSE可以作为一个Servlet替换org.springframework.web.servlet.DispatcherServlet。
改造步骤
通过依赖spring-boot-starter-transport,可以引入对于CSE的依赖。为了简单的接入CSE,还引入了cse-solution-service-engine。
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>spring-boot-starter-transport</artifactId>
</dependency>
<dependency>
<groupId>com.huawei.paas.cse</groupId>
<artifactId>cse-solution-service-engine</artifactId>
</dependency>
配置启动类和定义REST接口
在启动类Application里面加入@EnableServiceComb加载CSE运行时,并通过@SpringBootApplication(exclude=DispatcherServletAutoConfiguration.class)关闭Spring RESTful Web Service。
然后开发者就可以定义自己的REST接口(对应于Spring Cloud的Controller)。可以看出和Spring Cloud Controller的差异:
使用@RestSchema声明接口,并且指定Schema ID。CSE会对每个REST接口都生成一个接口定义文件,并上传到服务中心。Schema ID在微服务内部需要保持唯一。
显示的使用@RequestMapping定义路径。CSE支持JaxRS和SpringMVC两种方式定义REST接口,运行时根据这个标签来区分采用哪种方式生成契约。
其他服务的定义方式和Spring Cloud保持完全一致。CSE支持客户端以RestTemplate和RPC两种方式访问服务端,也可以通过浏览器使用REST的方式直接访问服务端,所以一个好的开发实践是给每个REST服务都定义一个接口Hello。使用CSE,不需要Spring Cloud的声明式REST调用(Feign),可以大大简化开发者的工作量。
@RestSchema(schemaId="hello")
@RequestMapping(path = &