基于Spring Boot 2.0的IoT应用集成和使用CSE实践( 三 )


[购房系统]()实现了调用链 。
开启监控
CSE提供了强大的[功能](),能够帮助开发者分析性能问题 。改造后的引用只需要引入相关jar包,并在.yml增加开关启用,即可使用 。数据可以通过两种方式获取 。
l 通过接口查询
地址: http://localhost:9091/metrics输出参考:(截取了执行时间和平均调用次数,统计周期为60s)"servicecomb.invocation(operation=huawei-cloud-ioccity-app-basemgmt.EquipmentInfoController.getEquipmentList,role=PRODUCER,stage=execution,statistic=totalTime,status=200,transport=rest)":0.011417577750000001,"servicecomb.invocation(operation=huawei-cloud-ioccity-app-basemgmt.EquipmentInfoController.getEquipmentList,role=PRODUCER,stage=total,statistic=count,status=200,transport=rest)":0.016666666666666666
l 输出到日志文件
配置项: cse.metrics.publisher.defaultLog.enabled=true输出参考:(截取了性能部分)producer:tpslatency(ms)max-latency(ms) queue(ms) max-queue(ms) execute(ms) max-execute(ms) operationrest.200:00.000727.7560.00023.5420.000704.214huawei-cloud-ioccity-app-basemgmt.EquipmentInfoController.getEquipmentList

基于Spring Boot 2.0的IoT应用集成和使用CSE实践

文章插图
常见问题
在使用新的框架对业务进行改造的时候,都会碰到一些问题 。[原理]()介绍了改造过程中可能碰到问题,以及一些通用的模式,可以阅读这个文章以评估改造的工作量 。下面列举了在改造IoT系统中碰到的几个常见问题及其解决方案 。
三方件冲突
在引入新的框架或者组件的时候,三方件冲突是非常常见的问题 。解决三方件冲突的前提是版本之间能够兼容 。冲突的原因可能很多,解决这类问题没有固定的思路,但掌握了maven依赖关系管理技巧以及理解冲突产生的原因后,通常分析和解决这类问题会变得更加简单 。建议阅读[maven管理技巧]() 。
数据类型支持
CSE支持的标签定义REST接口,一般情况下,将的应用改造为CSE都会非常简单 。但是CSE和的运行时不同,设计目标也有差异,所以还会存在一些差异的地方 。这块的主要差异点是使用CSE定义REST接口,支持的和数据类型相对于变少了,详细说明[参考]() 。
比如,下面的一些REST接口定义在CSE中是不能使用或者有限制使用的 。
importorg.springframework.data.domain.Page;@GetMapping(params= { "pageNumber", "pageSize" })public ResponseEntity>listByPagination(@RequestParam int pageNumber, @RequestParam intpageSize)
该接口在定义的时候,Page是一个 。CSE不支持在接口定义上使用泛型,包括、 class等 。CSE做出这个限制的原因是因为CSE需要遵循open API规范,接口定义必须能够存在对应的描述 。如果使用和 class,那么则无法通过来描述这个接口 。
importorg.springframework.data.domain.Page;@GetMapping(params= { "pageNumber", "pageSize" })public ResponseEntity>listByPagination(@RequestParam int pageNumber, @RequestParam intpageSize)
该接口在定义的时候,Page是一个 。CSE不支持在接口定义上使用泛型,包括、 class等 。CSE做出这个限制的原因是因为CSE需要遵循open API规范,接口定义必须能够存在对应的描述 。如果使用和 class,那么则无法通过来描述这个接口 。
CSE的数据类型支持[说明]()
l 解决方案
业务代码应该采用合理的分层设计,这样就可以保证代码能够非常灵活的在不同框架下进行迁移 。如果使用开发,分层设计可以遵循的一些建议 。业务逻辑在@中实现,框架接口发布在@实现 。当在不同框架发布服务的时候(比如、 MVC、CSE等),只需要简单的调整@代码,不需要修改@代码 。以上面的接口举个例子 。