# 本人声明:
# 1、翻译来自官方网站原文。仅做个人学习。
# 2、个人能力十分有限,借助了翻译工具并作了修改和备注【ps:xxx】,但仍只能满足个人理解使用,错误和漏洞百出,希望读者指正批评。
# 3、官网地址:[EdgeX Foundry Documentation](https://docs.edgexfoundry.org/2.4/)
在混合环境中工作
在某些情况下,作为开发人员或参与者,您希望使用特定的微服务。但是,您不希望必须下载所有源代码,然后构建并运行所有微服务。还有另一种方法!您可以下载并运行您需要的所有微服务的 EdgeX Docker 容器,并在本机或从容器外部选择的开发人员工具运行单个微服务(您可能正在使用的服务)。在 EdgeX 中,我们称之为“混合”环境 - 其中 EdgeX 平台的一部分从开发环境运行,而其他部分从 Docker 容器运行。本页概述了如何在混合开发环境中工作。
作为此过程的示例,假设您要使用虚拟设备服务/在虚拟设备服务上进行编码工作。你想要其余的 EdgeX 环境通过 Docker 容器启动并运行。您将如何设置此混合环境?一起来看看吧。
获取并运行 EdgeX Docker 容器
-
如果尚未设置,请按照使用 Docker 入门指南设置环境(Docker、DockerCompose 等),然后再继续。
-
由于我们计划在此示例中使用虚拟设备服务,因此您不需要或不想运行虚拟设备服务。您将通过 Docker Compose 运行所有其他服务。
根据 Docker 入门中的说明,找到并下载适用于您的开发环境的Docker Compose 文件。接下来,发出以下命令以启动 EdgeX 容器,然后停止虚拟设备服务(这是此示例中您正在使用的服务)。
docker-compose up -d docker-compose stop device-virtual运行 EdgeX 容器,然后停止要处理的服务容器 - 在本例中为虚拟设备服务容器。
注意
这些说明假定您正在使用 EdgeX 爱尔兰版本。它还假定您已下载相应的 Docker Compose 文件并已命名该文件,因此您不必在每次运行 Docker Compose 命令时都指定文件名。某些版本的 EdgeX 可能需要其他或其他容器才能运行。
docker-compose.yml提示
您还可以使用 EdgeX 撰写生成器工具创建仅包含所需服务的自定义 Docker 撰写文件。请参阅GitHub 中的compose生成器文档并查看撰写生成器工具。
-
运行以下命令以确认所有容器均已启动,并且虚拟设备容器不再运行。
docker-compose ps
获取、构建和运行(非 Docker)服务
运行 EdgeX 容器后,您现在可以下载、构建和本机(在容器外部)运行要处理的服务。在此示例中,虚拟设备服务用于举例说明使用 EdgeX 容器化服务获取、构建和运行本机服务所需的步骤。但是,这种做法可以适用于任何服务。
获取服务代码
根据入门 Go 开发人员,从 GitHub 中提取要处理的微服务代码。在 在这个例子中,我们使用 device-virtual-go 作为将要处理的微服务。
git clone https://github.com/edgexfoundry/device-virtual-go.git
生成服务代码
此时,您可以添加或修改代码以进行所需的服务更改。准备就绪后,必须将服务编译并生成为可执行文件。将文件夹更改为克隆的微服务目录并构建服务。
cd device-virtual-go/
make build
从 Github 克隆服务,更改代码,然后在本地构建服务。
更改配置
根据您正在处理的服务,您可能需要更改服务的配置,以指向并使用容器化的其他服务(在 Docker 中运行)。特别是,如果您正在处理的服务与运行容器化服务的 Docker 引擎不在同一主机上,则可能需要更改配置。
检查 device-virtual-go 的 cmd/res 文件夹中的configuration.toml文件。请注意,服务(位于配置的[服务]部分),注册表(位于[注册表]部分)和所有“客户端”(位于[客户端]部分)建议这些服务是“本地主机”。当服务不在同一主机(特别是本地主机)上运行时,需要更改这些和其他主机配置元素。当您的服务在与 EdgeX 其余部分不同的主机上运行时,请将 [服务] 更改为托管服务的计算机的地址。更改 [注册表] 和 [客户端] 配置以指定托管这些服务的计算机的位置。如果必须更改配置,请在进行更改后保存 configuration.toml 文件。Host``Host``Host
以本机方式运行服务代码。
命令创建的可执行文件位于服务的 cmd 文件夹中。将文件夹更改为可执行文件的位置。根据您的 EdgeX 设置设置所需的任何环境变量。在此示例中,我们没有启动安全元素,因此我们需要设置以关闭安全性。最后,直接从终端运行服务。make build``EDGEX_SECURITY_SECRET_STORE``false
cd cmd
export EDGEX_SECURITY_SECRET_STORE=false
./device-virtual
将文件夹更改为服务的 cmd/ 文件夹,设置 env vars,然后在 cmd 文件夹中执行服务可执行文件。
检查结果
此时,您的虚拟设备微服务应与其 Docker 容器中运行的其他 EdgeX 微服务通信。由于核心元数据回调在混合环境中不起作用,因此在核心元数据中创建虚拟设备回调后,虚拟设备服务将不会在初始运行时收到添加设备回调。解决此问题的简单方法是停止(从终端)并重新启动虚拟设备服务(再次执行)。Ctrl-c``./device-virtual
停止并重新启动后的虚拟设备服务日志。
给虚拟设备几秒钟左右的时间来初始化自身并开始向核心数据发送数据。要检查它是否正常工作,请打开浏览器并将浏览器指向核心数据 以检查是否正在存储事件。可以通过调用检查核心数据中事件计数的核心数据 API 来执行此操作。
http://localhost:59880/api/v2/event/count
对于此示例,您可以通过检查事件计数来检查虚拟设备服务是否将数据发送到 Core Data。
注意
如果愿意,您还可以将服务导入 GoLand,然后从 GoLand 编码并运行服务。按照入门 - Go 开发人员中的说明了解如何在 GoLand 中导入、构建和运行服务。