你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

路由 Azure 数字孪生事件

本文介绍 Azure 数字孪生用于发送事件数据的过程,包括用于在 Azure 数字孪生内部路由事件,以及将事件数据从外部发送到下游服务或服务外部的连接计算资源。

从 Azure 数字孪生路由 事件通知 的过程分为两步:创建 终结点,然后创建 事件路由 以将数据发送到这些终结点。 本文更详细地介绍了其中每个概念。 它还说明了当终结点未能及时传递事件时会发生什么(称为死信的过程)。

事件路由概述

发送 Azure 数字孪生数据有两种主要方案,事件路由用于完成这两种情况:

  • 将 Azure 数字孪生图中的一个孪生体的事件数据发送给另一个孪生体。 例如,当一个数字孪生体上的属性发生变化时,可能需要基于更新的数据通知并更新另一个数字孪生体。
  • 将 Azure 数字孪生外部的数据发送到下游数据服务,以便进行更多存储或处理。 例如,如果已经在使用 Azure Maps,可能需要提供 Azure 数字孪生数据,以通过集成建模或查询来增强解决方案。

对于任何事件目标,事件路由通过将事件数据从 Azure 数字孪生发送到订阅中自定义的终结点来发挥作用。 终结点目前支持三项 Azure 服务:事件中心事件网格服务总线。 每项 Azure 服务都可以连接到其他服务并充当中转站,将数据发送到 Azure Maps 等最终目标,或返回 Azure 数字孪生以进行相关图更新。

下图演示了通过更大的 IoT 解决方案的事件数据流,其中包括通过终结点将 Azure 数字孪生数据发送到其他 Azure 服务,以及返回到 Azure 数字孪生:

Azure 数字孪生通过终结点将数据路由到多个下游服务的图示。

对于 Azure 数字孪生外部的数据出口,事件路由的典型下游目标是时序见解、Azure Maps、存储和分析解决方案。 Azure 数字孪生针对向出口服务发出的数据至少实现一次传递。

要在同一 Azure 数字孪生解决方案中路由内部数字孪生事件,请继续学习下一部分。

路由内部数字孪生事件

事件路由是用于处理孪生图中的事件、将数据从数字孪生发送到数字孪生的机制。 这种事件操作是通过事件网格将事件路由连接到计算资源(如 Azure Functions)来完成的。 然后,这些函数会定义孪生体应如何接收和响应事件。

当计算资源想要根据通过事件路由接收到的事件来修改孪生图时,它有助于提前知道应修改哪个孪生。 事件消息还包含发送消息的源孪生体的 ID,因此计算资源可使用查询或遍历关系来查找所需操作的目标孪生体。

计算资源还需要单独建立安全和访问权限。

若要演练如何设置用于处理数字孪生体事件的 Azure 函数,请参阅设置孪生体到孪生体的事件处理

创建终结点

若要定义事件路由,开发人员必须首先定义终结点。 终结点是支持路由连接的 Azure 数字孪生外部的目标。 支持的目标包括:

  • 事件网格自定义主题
  • 事件中心
  • 服务总线

若要创建终结点,可使用 Azure 数字孪生 REST API、CLI 命令或 Azure 门户。

定义终结点时,需要提供:

  • 终结点名称
  • 终结点类型(事件网格、事件中心或服务总线)
  • 要进行身份验证的主要连接字符串和辅助连接字符串
  • 终结点的主题路径,例如 your-topic.westus2.eventgrid.azure.net

(可选)可以选择使用基于标识的身份验证创建终结点,以将终结点与系统分配或用户分配的托管标识一起使用。 此选项仅适用于事件中心和服务总线类型终结点(事件网格不支持此选项)。

控制平面中可用的终结点 API 包括:

  • 创建终结点
  • 获取终结点列表
  • 按名称获取终结点
  • 按名称删除终结点

有关创建终结点的详细说明,请参阅 创建终结点

创建事件路由

若要创建事件路由,可以使用 Azure 数字孪生 REST API、CLI 命令或Azure 门户。

下面是使用 CreateOrReplaceEventRouteAsync.NET (C#) SDK 调用在客户端应用程序中创建事件路由的示例:

string eventFilter = "$eventType = 'DigitalTwinTelemetryMessages' or $eventType = 'DigitalTwinLifecycleNotification'";
var er = new DigitalTwinsEventRoute("endpointName", eventFilter);
await client.CreateOrReplaceEventRouteAsync("routeId", er);
  1. 首先创建一个 DigitalTwinsEventRoute 对象,构造函数将使用终结点的名称。 此 endpointName 字段标识一个终结点,如事件中心、事件网格或服务总线。 在进行此注册调用之前,必须在订阅中创建这些终结点,并使用控制平面 API 将这些终结点附加到 Azure 数字孪生。

  2. 事件路由对象还有一个 Filter 字段,该字段可用于限制流经此路由的事件类型。 筛选器 true 启用无额外筛选的路由(筛选器 false 禁用路由)。

  3. 然后,此事件路由对象将与路由名称一起传递到 CreateOrReplaceEventRouteAsync

提示

所有 SDK 函数都提供同步和异步版本。

有关创建事件路由的详细说明,请参阅 创建路由和筛选器

死信事件

当终结点无法在特定时间段内传递事件,或在尝试传递事件若干次后仍无法传递,它可将未传递的事件发送到存储帐户。 此过程称为“死信处理”。 如果满足以下任一条件,Azure 数字孪生会将事件列入死信队列:

  • 事件未在生存期内传递
  • 尝试传递事件的次数已超出限制

如果满足上述任一条件,则会将该事件删除或视为死信。 默认情况下,每个终结点不会启用死信功能。 若要启用该功能,在创建终结点时必须指定一个存储帐户来存放未传递的事件。 然后,你可从此存储帐户中拉取事件来解决传递问题。

在设置死信位置之前,必须有一个包含容器的存储帐户。 在创建终结点时,需要提供此容器的 URL。 死信作为带有 SAS 令牌的容器 URL 提供。 该令牌只需要存储帐户中目标容器的 write 权限。 完整格式的 URL 将为 https://<storage-account-name>.blob.core.windows.net/<container-name>?<SAS-token>

若要详细了解 SAS 令牌,请参阅使用共享访问签名 (SAS) 授予对 Azure 存储资源的有限访问权限。

若要了解如何使用死信设置终结点,请参阅 终结点选项:死信

事件消息的类型

IoT 中心和 Azure 数字孪生中的不同类型的事件会生成不同类型的通知消息,如下所述。

通知类型 路由源名称 生成自…
数字孪生体更改通知 数字孪生体更改通知 任何数字孪生体属性更改
数字孪生体生命周期通知 数字孪生体生命周期通知 任何数字孪生体的创建或删除操作
数字孪生体关系更改通知 数字孪生体关系更改通知 任何数字孪生体关系更改
数字孪生体遥测消息 遥测消息 任何遥测消息

后续步骤

继续按照设置终结点和事件路由的分步说明进行操作:

或者,按照此演练为 Azure 数字孪生中的孪生事件处理设置 Azure 函数: