分享|EdgeX 二次开发之 Hybrid 混合模式
Hybrid 混合模式开发在基础开发中非常有用,不需要编译 docker image,直接在开发主机上运行。

EdgeX Foundry 边缘计算框架的分层和服务为边缘设备/节点和云/企业应用之间提供了一个双向转换引擎。EdgeX 作为边缘计算平台是非常不错的选择。

Hybrid 混合模式开发在基础开发中非常有用,不需要编译 docker image,直接在开发主机上运行。

前言

在某些情况下,作为开发人员或贡献者,您希望开发特定的微服务。然而,您不想下载所有源代码,然后构建并运行所有微服务。还有一种替代方法!您可以为您需要的所有微服务下载并运行 EdgeX Docker 容器,并以本机或从容器外部选择的开发人员工具运行您的单个微服务(您可能正在使用的微服务)。在 EdgeX 中,我们将其称为“混合”环境 - EdgeX 平台的一部分从开发环境运行,而其他部分从 Docker 容器运行。本页概述了如何在混合开发环境中工作。

  • 核心服务(Core Services)在 Docker 容器中运行;
  • 设备服务/应用服务在本地机器中运行;

作为此过程的一个示例,假设您想要使用虚拟设备服务进行编码工作。您希望 EdgeX 环境的其余部分通过 Docker 容器启动并运行。您将如何设置这个混合环境?让我们来看看。

EdgeX Docker 容器

  1. 如果您还没有这样做,请先按照 Docker 入门指南设置您的环境(Docker、Docker Compose 等),然后再继续。
  2. 由于我们计划在此示例中使用虚拟设备服务(virtual service),因此您不需要或不想运行虚拟设备服务。您将通过 Docker Compose 运行所有其他服务。

    根据 Docker 入门中的说明,找到并下载适合您的开发环境的 Docker Compose 文件。接下来,发出以下命令来启动 EdgeX 容器,然后停止虚拟设备服务(这是您在本示例中正在使用的服务)。

    docker-compose up -d
    docker-compose stop device-virtual
    

    EdgeX_GettingStartedHybridRunContainers 运行 EdgeX 容器,然后停止您要使用的服务容器 - 在本例中为虚拟设备服务容器。

    注意

    这些说明假设您正在使用 EdgeX Minnesota 或更高版本。它还假设您已下载适当的 Docker Compose 文件并将其命名为 docker-compose.yml,因此您不必在每次运行 Docker Compose 命令时指定文件名。某些版本的 EdgeX 可能需要其他或额外的容器才能运行。

    提示

    您还可以使用 EdgeX Compose Builder 工具创建仅包含您想要的服务的自定义 Docker Compose 文件。请参阅 GitHub 上的 Compose Builder 文档并查看 Compose Builder 工具。

  3. 运行以下命令以确认所有容器已启动并且虚拟设备容器不再运行。

    docker-compose ps
    

Get, Build 和 Run 服务(非 Docker)

随着 EdgeX 容器的运行,您现在可以下载、构建并本地(在容器外部)运行您想要使用的服务。在此示例中,虚拟设备服务用于举例说明使用 EdgeX 容器化服务获取、构建和运行本机服务所需的步骤。然而,这种做法可以应用于任何服务。

获取/编写代码

根据 Go 开发人员入门指南,从 GitHub 提取您想要使用的微服务代码。在此示例中,我们使用最新发布的 device-virtual-go 标签作为将要使用的微服务。主分支是下一个版本的开发分支。应始终使用最新的版本标签,以便您使用最新的稳定代码。可以在此处找到发布标签。发布标签是那些名称中没有 -dev 的标签。

git clone --branch v3.1.0 https://github.com/edgexfoundry/device-virtual-go.git
cd device-virtual-go
git checkout v3.1.0

构建服务代码

此时,您可以添加或修改代码来进行您需要的服务更改。准备就绪后,您必须将服务编译并构建为可执行文件。将文件夹更改为克隆的微服务目录并构建服务。

make build

image

本地运行服务代码

由 make build 命令创建的可执行文件可以在服务的 cmd 文件夹中找到。将文件夹更改为可执行文件的位置。根据您的 EdgeX 设置设置所需的任何环境变量。在此示例中,我们没有启动安全元素,因此我们需要将 EDGEX_SECURITY_SECRET_STORE 设置为 false 以关闭安全性。最后,直接从终端运行该服务。

cd cmd
export EDGEX_SECURITY_SECRET_STORE=false
./device-virtual -cp -d -o

注意

  • -cp 标志告诉服务使用配置提供程序。这是必需的,以便服务可以提取通用配置。
  • -d 标志告诉服务在开发人员模式(也称为混合模式)下运行,以便依赖服务配置中的任何主机名都会自动从其 Docker 网络名称更改为 localhost,从而允许服务找到依赖服务。
  • -o 标志告诉服务将配置从本地文件覆盖到配置提供程序中(仅当服务先前在 Docker 中运行时才需要)。

警告

通用配置是 EdgeX 3.0 中的新增功能。 EdgeX 服务现在具有精简的本地配置文件,仅包含服务的私有配置。所有其他配置设置现在都处于通用配置中。有关更多详细信息,请参阅服务配置部分。

image 将文件夹更改为服务的 cmd/ 文件夹,设置环境变量,然后执行 cmd 文件夹中的服务可执行文件。

检查运行结果

此时,您的虚拟设备微服务应该与在其 Docker 容器中运行的其他 EdgeX 微服务进行通信。由于核心元数据回调在混合环境中不起作用,因此虚拟设备服务在核心元数据中创建添加设备回调后,在首次运行时将不会收到添加设备回调。解决此问题的简单方法是停止(从终端按 Ctrl-c)并重新启动虚拟设备服务(再次执行 ./device-virtual -cp -d)。

image 停止并重新启动后的虚拟设备服务日志。

给虚拟设备几秒钟左右的时间来初始化自身并开始向 Core Data 发送数据。要检查它是否正常工作,请打开浏览器并将浏览器指向 Core Data 以检查事件是否正在存储。您可以通过调用 Core Data API 来检查 Core Data 中的事件计数来完成此操作。

curl -s http://localhost:59880/api/v3/event/count |jq

image

对于此示例,您可以通过检查事件计数来检查虚拟设备服务是否正在将数据发送到 Core Data。

注意

如果您选择,还可以将服务导入 GoLand,然后从 GoLand 编码并运行该服务。按照入门 - Go 开发人员中的说明了解如何在 GoLand 中导入、构建和运行服务。

关于我们

亿琪软件

上海亿琪软件有限公司成立于 2016 年,专注于 5G 通信、AI 人工智能、边缘计算和大数据网络安全多项技术领域,致力于物联网领域前沿技术的创新,为用户提供全方位、智能化和安全的物联网解决方案。

2023 年,公司发布“YiFUSION |工业边缘智能融合一体机”产品,为工业客户提供一整套的边缘计算+AI 能力:高性能数据采集、多类型数据融合、AI 算法集成、云端业务对接。在边缘网关的基础上,集成了 IoT 平台的边缘协同能力、本地 Web SCADA 和 HMI 功能、本地数据存储、边缘 AI 视频分析、行业应用集成等。

2022 年,公司推出 “YiCLOUD |亿琪云”一站式物联网应用解决方案。公司的业务涵盖了智慧城市、智慧农业、智能工厂和智慧园区等多个领域,公司软硬件产品和解决方案获得华为技术认证,得到中国移动 OCP 认证,公司还是边缘计算产业联盟 ECC 成员。

关注我们

yiqisoftedgexfoundry

联系我们--商业服务

  • 网站:http://yiqisoft.cn
  • 邮件:support@yiqisoft.cn
  • 电话:021-68863086
  • 手机:186-1666-9123
文档|EdgeX 设备微服务之西门子 S7 -- device-s7 完整使用手册
EdgeX 设备微服务 device-s7 由我司贡献给社区,文档也是必不可少的环节,社区要求英文,现翻译成中文,方便国内客户阅读和使用。