你当前正在访问 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 准备环境

创建事件路由

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

注意

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

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

如果要编写此流的脚本,你可能希望为终结点服务完成部署留出 2-3 分钟的等待时间,然后再继续进行路由设置,从而解决此问题。

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

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

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

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

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

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

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

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

要启用该路由,还必须“添加事件路由筛选器”,其值至少为 true。 (保留默认值 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 部分中的属性进行筛选。

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

数据类型 示例
String STARTS_WITH($body.$metadata.$model, 'dtmi:example:com:floor')
CONTAINS(subject, '<twin-ID>')
Integer $body.errorCode > 200
Double $body.temperature <= 5.5
Bool $body.poweredOn = true
Null $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 数字孪生的路由指标的完整列表,请参阅 Azure 数字孪生路由指标

后续步骤

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