你当前正在访问 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 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);
首先创建一个
DigitalTwinsEventRoute
对象,构造函数将使用终结点的名称。 此endpointName
字段标识一个终结点,如事件中心、事件网格或服务总线。 在进行此注册调用之前,必须在订阅中创建这些终结点,并使用控制平面 API 将这些终结点附加到 Azure 数字孪生。事件路由对象还有一个 Filter 字段,该字段可用于限制流经此路由的事件类型。 筛选器
true
启用无额外筛选的路由(筛选器false
禁用路由)。然后,此事件路由对象将与路由名称一起传递到
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 函数: