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

本文通过一个IoT的应用展现在 Boot 2.0中集成和使用CSE 。IoT应用原来使用 Boot 2.0开发,通过少量的步骤集成CSE,然后展现了集成后带来了哪些新特性,以及中间存在的一些变化和问题 。通过这个例子,我们快速的将一个 Boot 2.0的原型系统,改造为具备通用可靠性和运维能力的微服务,加快了业务系统的建设速度 。
集成步骤
基本集成过程分为三步 。
1. 增加依赖关系
在里面导入CSE对于 boot 2提供的组件包依赖管理以及CSE自身的依赖管理 。需要注意将 boot 2的依赖管理放到前面,因为CSE缺省的依赖管理是 boot 1的 。如果业务需要引入特定的 boot或者 cloud版本,也可以通过这个机制将 boot或者 cloud的引入 。[这里]() 有一个介绍的文章,使用解决三方件冲突,是非常有用的技巧,正确掌握它的原理,能够帮助开发者快速定位和解决常见的三方件冲突问题 。
org.apache.servicecombjava-chassis-dependencies-springboot21.1.0.B018pomimportcom.huawei.paas.csecse-dependency2.3.46pomimport
然后引入CSE对于 boot 2提供的支持组件包 。
com.huawei.paas.csecse-solution-service-engineorg.slf4jslf4j-log4j12org.apache.servicecombspring-boot2-starter-servlet
2. 修改运行参数
在 Boot 2中,开发者会将服务通过发布为REST接口 。集成CSE后,服务通过CSE提供的进行发布 。需要在运行参数里面启用CSE功能和禁用 。@标签会启用和加载CSE,参数会禁用 。
@SpringBootApplication(scanBasePackages= {exclude = DispatcherServletAutoConfiguration.class)@EnableServiceCombpublicclass Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}
3. 发布服务接口
CSE发布REST接口的方式和 Boot 2有少量差异,需要将@修改为@,并且显示的声明@ 。
@RestSchema(schemaId="EquipmentInfoController")@RequestMapping(value= "http://www.kingceram.com/equipmentInfo")publicclass EquipmentInfoController
服务会通过服务中心进行发布,在.yml中指定服务中心地址,并提供简单的微服务信息 。其中.name可以使用原来项目的名字,cse.rest.采用的监听端口.port进行发布 。
## CSEconfigurationsAPPLICATION_ID:houseappservice_description:name: ${spring.application.name}version: 0.0.1cse:service:registry:address: http://localhost:30100instance:watch: falserest:address: 0.0.0.0:9091
集成效果
在上面的例子中,很简单的将原来的 Boot 2.0应用的运行时转换成了了CSE 。但是转换本身不是目的,下面通过一些变化来说明转换后给业务系统带来的收益以及可能的功能丢失和工作量,以方便用户评估是否值得做这样的集成 。
运行时变化
运行时变化是收益和损失的直接来源 。在上面的改造中,客户端代码和服务端代码均没有变化(或者极少变化),客户端仍然使用调用服务端代码,服务端仍然提供的是REST接口,可以使用post man等工具访问 。运行时变化不修改微服务对外的接口行为,这个是改造的基础 。
改造前,Boot 2的运行时简图如下 。在客户端,可以使用 提供的各种处理请求消息编码和响应消息解码,在服务端,可以使用 MVC提供的各种功能对用户参数进行校验 。

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