Spring Cloud应用接入华为云微服务CSE( 四 )


客户端访问
CSE简化了客户端访问服务端的方式,同时也支持 Cloud使用的方式去访问 。
@RpcReference(microserviceName="helloprovider", schemaId="hello")Hello client;client.sayHi(name)
RestTemplate restTemplate = RestTemplateBuilder.create();restTemplate.getForObject("cse://helloprovider/hello/sayHi?name=" + name, String.class);
体验改造后的服务
在构造的过程中,已经体验了开发上的便利:比Feign更好的RPC支持,以及在"快速接入"章节的相关功能 。改造后的应用通过::7211/hello?name=3进行访问 。然后可以登录CSE,体验更多的治理功能 。下面挑选了几个经常使用的功能进行描述 。
服务契约
进入微服务引擎,微服务名录查看微服务信息,可以看到包含如下接口定义文件 。
swagger: "2.0"info:version: "1.0.0"title: "swagger definition for io.provider.HelloService"x-java-interface: "cse.gen.spring_cloud_application_cse_rpc.helloprovider.hello.HelloServiceIntf"basePath: "/hello"consumes:- "application/json"produces:- "application/json"paths:/sayhi:get:operationId: "sayHi"parameters:- name: "name"in: "query"required: falsetype: "string"responses:200:description: "response of 200"schema:type: "string"
当需要使用浏览器、等HTTP客户端访问后台接口的时候,契约可以替代接口说明文档 。
调用关系
在服务治理界面,通过图形化的方式展现了微服务之间的调用关系 。
服务治理
在服务治理页面,对下发一个故障注入,接口调用模拟3秒的时延 。
然后访问接口::7211/hello?name=3可以发现这个接口返回时间被延长 。
服务监控
将应用部署到华为云以后,微服务会统计和上报自己的监控状态,这样用户就可以通过仪表盘、的性能监控等功能,监控微服务的运行状态、调用链等指标 。
注意:本地调试情况下,不会上报监控数据 。并且日志可能打印如下错误:
Can not find any instances from service center due to previous errors. service=default/CseMonitoring/latest
如果不期望上报监控数据,可以增加配置项:
servicecomb.monitor.client.enable=false
关闭 。
补充说明
除了上述可以直接感受到的功能,切换为CSE RPC后,请求处理流程也发生了变化 。调用流程使用了CSE优秀的统一一致的处理流程 。
该流程里面的处理链扩展能力和契约能力,是所有治理的基础 。
当然,修改后,还会发生其他一些变化,业务代码还会涉及一些修改,这些修改包括REST接口定义的数据类型支持(参考说明),以及 Cloud其他的构建在Web 之上的能力 。修改过程中,也可能会碰到若干jar包冲突或者不兼容的情况 。
这些情况都不涉及到业务逻辑代码的修改,本质上只是改变了业务代码发布为服务的表现形式 。使用CSE,能够更好的聚焦于业务逻辑开发 。
改造过程中的常见问题
是J2EE()协议定义的对象 。CSE支持在协议上、HTTP协议以及其他协议上提供REST服务,因此不支持特定技术框架的对象 。需要将接口定义修改为平台无关的原型 。
以下面接口为例:
@RequestMapping(value = "http://www.kingceram.com/auth", method = RequestMethod.POST)public ResultResponse createAuthenticationToken(HttpServletRequest request,@RequestBody JwtAuthenticationRequest authenticationRequest) throws AuthenticationException{String type = authenticationRequest.getType();String appCode = request.getHeader(BaseTypeConstants.HEADER_APP_CODE);String appType = request.getHeader(BaseTypeConstants.HEADER_APP_TYPE);… …
修改后:
【Spring Cloud应用接入华为云微服务CSE】