扩展 EdgeX Foundry 混合开发环境
构建混合开发环境的原因
在上文中,我们介绍了 EdgeX Foundry 的背景和概况;在本文中,我们会介绍实现更高效率混合开发环境的一种方法。
EdgeX Foundry 的核心工程数目超过 11 个,这还不包括每个工程对应的 client 和 domain 等依赖工程。而绝大多数情况下,我们实际要开发是其北侧端的 export 服务和南侧端的 device 服务。如果把 EdgeX Foundry 全部代码放入本地的 Eclipse IDE 中,不仅配置复杂,而且对于资源有限的笔记本来说,启动 EdgeX Foundry 全部核心工程,所产生的卡顿现象将影响开发效率。
在 EdgeX Foundry 的官方文档中有提示建议采用混合开发模式:一部分核心工程运行在其他宿主机上,将开发所针对的单个工程运行在 Eclipse 中。不过如果用这种方法,需要在项目工程中更改几十处的 IP 地址,对于 IP 经常变化的环境中开发来说非常不方便。
Edgex Foundry 官方混合开发环境文档参考:
https://wiki.edgexfoundry.org/display/FA/Get+EdgeX+Foundry±+Developers
这里,我们介绍一种扩展的 EdgeX Foundry 混合开发环境,它是基于 Docker Swarm、 Eclipse 的远程调试、devtools 插件来实现的:
- Docker Swarm 用于集群部署,其内置的跨主机网络可以连接两个不同宿主机上的container。
- Eclipse 的远程调试,依赖 Spring Boot 的 devtools 热部署插件,该插件可以在修改代码的时候自动重新编译启动 Docker 容器中 Spring app 应用工程,所以项目不一定非要真是的跑在 Eclipse 中也能调试编写代码。
这种以 Docker container 和 Eclipse 远程调试的方式,不仅仅是为了扩展 EdgeX Foundry 开发环境。在任何以 jar 包启动并运行到 Docker 内的开发环境来说,这种方式可以解决如下问题:
- Jar 包运行的 Java 程序读取本地文件的方式与 War 包方式不同,更与 Eclipse 中开发时不同,经常会有在 Eclipse 中写好的代码放到 Docker 中后,运行报错问题。
- 更好地实时监控运行在 Docker 环境中的状态,有助于提前发现问题。
创建 Docker Swarm 的跨主机网络步骤
1. 下载操作系统对应版本的 docker-ce
ce指的是社区版本,社区版本已经足够使用,按官网安装即可。
2. 初始化 docker swarm
(1) 在 EdgeX Foundry 的宿主机上,执行如下命令:
docker swarm init
==>拷贝输出中的如下