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

在 Azure 数字孪生中创建事件路由和筛选器

本文指导你完成使用 Azure 门户Azure CLI az dt route 命令事件路由数据平面 API.NET (C#) SDK 创建事件路由的过程。

事件通知从 Azure 数字孪生路由到下游服务或连接的计算资源分为两个步骤:创建终结点,然后创建事件路由以将数据发送到这些终结点。 本文介绍第二步,设置路由以控制将哪些事件发送到哪些 Azure 数字孪生终结点。 若要继续阅读本文,你应已创建终结点

先决条件

  • 需要一个 Azure 帐户, 可以免费设置

  • 需要在 Azure 订阅中使用 Azure 数字孪生实例。 如果还没有实例,可以使用设置实例和身份验证中的步骤创建一个。 准备好以下设置值,以便稍后在本文中使用:

    • 实例名称
    • 资源组

    设置实例后,可以在 Azure 门户中找到这些详细信息。

    Azure 门户中 Azure 数字孪生实例概述页面的屏幕截图。名称和资源组突出显示。

  • 使用创建终结点中的说明创建终结点。 在本文中,将创建一个路由以将数据发送到该终结点。

接下来,如果打算在遵循本指南时使用 Azure CLI,请执行以下说明。

为 Azure CLI 准备环境

创建事件路由

创建终结点后,需要定义事件路由,以将数据发送到终结点。 通过这些路由,开发人员可在整个系统中串联事件流并连接到下游服务。 单一路由可允许选择多个通知和事件类型。 有关事件路由的详细信息,请参阅 路由 Azure 数字孪生事件

注意

在继续创建路由之前,请确保至少创建了一个终结点,如 先决条件 中所述。

如果仅最近部署了终结点,请在尝试将其用于新事件路由之前验证它们是否已完成部署。 如果由于终结点未就绪而导致路由部署失败,请等待几分钟,然后重试。

如果要编写此流程的脚本,建议在脚本中加入 2-3 分钟的等待时间,以确保终结点服务完成部署,然后再继续进行路由设置。

路由定义可包含以下元素:

  • 要使用的路由名称
  • 要使用的终结点名称
  • 一个筛选器,用于定义发送到终结点的事件
    • 若要禁用路由而不发送事件,请使用筛选器值 false
    • 若要启用未指定筛选条件的路由,请使用筛选器值 true
    • 有关任何其他类型的筛选器的详细信息,请参阅 “筛选器事件 ”部分

如果没有路由名称,则不会在 Azure 数字孪生之外路由任何消息。 如果存在路由名称且筛选器为 true,则所有消息都将路由到终结点。 如果有路由名称和添加其他筛选器,则会根据筛选器筛选消息。

可以使用 Azure 门户事件路由数据平面 APIaz dt route CLI 命令创建事件路由。 本部分的其余内容将介绍创建过程。

若要创建事件路由,请转到 Azure 门户中 Azure 数字孪生实例的详细信息页。 可以通过在门户搜索栏中输入实例的名称来查找该实例。

从实例菜单中选择“事件路由”。 然后,在显示的“事件路由”页选择“+ 创建事件路由”。

在打开的“创建事件路由”页上,至少选择以下项目:

  • “名称”字段的路由名称
  • 要用于创建路由的终结点

要启用该路由,还必须“添加事件路由筛选器”,其值至少为 。 (保留创建路由的false默认值,但不会向其发送任何事件。为此,请切换高级编辑器的开关以启用它,并在“筛选器”框中写入true

在 Azure 门户中为实例创建事件路由的屏幕截图。

完成后,选择“保存”按钮创建事件路由。

筛选事件

如前所述,路由具有筛选字段。 如果路由上的筛选器值为 false,则不会向终结点发送任何事件。

启用最小筛选器 true后,终结点将从 Azure 数字孪生接收不同类型的事件:

可以通过定义更具体的筛选器来限制将发送的事件类型。

注意

筛选器区分大小写,并需要与有效负载大小写匹配。 对于遥测筛选器,筛选器中的大小写必须与设备发送的遥测中的大小写匹配。

若要在创建事件路由时添加事件筛选器,请使用“创建事件路由”页的“添加事件路由筛选器”部分。

可以从一些基本的常用筛选器选项中选择,也可以使用高级筛选器选项编写自己的自定义筛选器。

使用基本筛选器

若要使用基本筛选器,请展开“事件类型”选项,并选择与要发送到终结点的事件对应的复选框。

在 Azure 门户中使用基本筛选器创建事件路由的屏幕截图,其中突出显示了事件的复选框。

这样做会自动填充筛选器文本框,其中包含所选筛选器的文本:

在 Azure 门户中使用基本筛选器创建事件路由的屏幕截图,其中突出显示了选择事件后自动填充的筛选器文本。

使用高级筛选器

也可以使用高级筛选器选项来编写自己的自定义筛选器。

要使用高级筛选器选项创建事件路由,请切换“高级筛选器”的开关将其启用。 然后,则可以在“筛选器”框中编写自己的事件筛选器:

在 Azure 门户中使用高级筛选器创建事件路由的屏幕截图。

支持的路由筛选器

下面是受支持的路由筛选器。

筛选器名称 说明 筛选文本架构 支持的值
True/False 允许创建无筛选的路由,或禁用路由,这样就不会发送事件 <true/false> true = 启用无筛选的路由
false = 禁用路由
类型 流经数字孪生体实例的事件类型 type = '<event-type>' 以下是可能的事件类型值:
Microsoft.DigitalTwins.Twin.Create
Microsoft.DigitalTwins.Twin.Delete
Microsoft.DigitalTwins.Twin.Update
Microsoft.DigitalTwins.Relationship.Create
Microsoft.DigitalTwins.Relationship.Update
Microsoft.DigitalTwins.Relationship.Delete
microsoft.iot.telemetry
Azure 数字孪生实例的名称 source = '<host-name>' 以下是可能的主机名值:

用于通知:<your-Digital-Twins-instance>.api.<your-region>.digitaltwins.azure.net

用于遥测:<your-Digital-Twins-instance>.api.<your-region>.digitaltwins.azure.net/<twin-ID>
使用者 在事件源的上下文中对事件的描述 subject = '<subject>' 以下是可能的使用者值:

对于通知:使用者为 <twin-ID>
或使用者的 URI 格式(由多个部件或 ID 唯一标识):
<twin-ID>/relationships/<relationship-ID>

对于遥测:使用者是组件路径(如果遥测是从一个孪生体组件发出的),例如 comp1.comp2。 如果遥测不是从组件发出的,则其使用者字段为空。
数据架构 DTDL 模型 ID dataschema = '<model-dtmi-ID>' 对于遥测:数据架构是孪生体或发出遥测的组件的模型 ID。 例如 dtmi:example:com:floor4;2

对于通知(创建/删除):可以通过 $body.$metadata.$model 访问通知正文中的数据架构。

对于通知(更新):可以通过 $body.modelId 访问通知正文中的数据架构
内容类型 数据值的内容类型 datacontenttype = '<content-type>' 内容类型为 application/json
规范版本 所使用的事件架构的版本 specversion = '<version>' 版本必须为 1.0。 此值指示 CloudEvents 架构版本 1.0
通知正文 引用通知的 data 字段中的任何属性 $body.<property> 有关通知示例,请参阅事件通知data 字段中的任何属性都可以使用 $body 进行引用

注意

Azure 数字孪生目前不支持基于数组中的字段筛选事件。 此限制包括对数字孪生更改通知部分中patch的属性进行筛选。

以下数据类型可以用作对之前数据进行引用后返回的值:

数据类型 示例
字符串 STARTS_WITH($body.$metadata.$model, 'dtmi:example:com:floor')
CONTAINS(subject, '<twin-ID>')
整数 $body.errorCode > 200
加倍 $body.temperature <= 5.5
布尔值 $body.poweredOn = true
$body.prop != null

定义路由筛选器时支持以下运算符:

系列 运算符 示例
逻辑 AND、OR、( ) (type != 'microsoft.iot.telemetry' OR datacontenttype = 'application/json') OR (specversion != '1.0')
比较 <、<=、>、>=、=、!= $body.temperature <= 5.5

定义路由筛选器时支持以下函数:

函数 说明 示例
STARTS_WITH(x,y) 如果值 x 以字符串 y 开头,则返回 true。 STARTS_WITH($body.$metadata.$model, 'dtmi:example:com:floor')
ENDS_WITH(x,y) 如果值 x 以字符串 y 结尾,则返回 true。 ENDS_WITH($body.$metadata.$model, 'floor;1')
CONTAINS(x,y) 如果值 x 包含字符串 y,则返回 true。 CONTAINS(subject, '<twin-ID>')

实现或更新筛选器时,更改可能需要几分钟时间才会反映在数据管道中。

监视事件路由

可在 Azure 门户中查看计数、延迟和失败率等路由指标。

有关使用 Azure Monitor 查看和管理指标的信息,请参阅 使用 Azure Monitor 指标资源管理器分析指标。 有关可用于 Azure 数字孪生的路由指标的完整列表,请参阅 路由指标

后续步骤

阅读可接收的不同类型的事件消息: