使用 IoT 中樞訊息路由將裝置到雲端訊息傳送到不同的端點

注意

本文中提及的某些功能 (例如雲端對裝置傳訊、裝置對應項和裝置管理) 僅適用於 IoT 中樞的標準層。 如需基本和標準/免費IoT 中樞層的詳細資訊,請參閱為您的解決方案選擇正確的IoT 中樞層

訊息路由可讓您以自動化、可調整且可靠的方式,將裝置的訊息傳送到雲端服務。 訊息路由可用於:

  • 傳送裝置遙測訊息以及事件 ,也就是裝置生命週期事件、裝置對應項變更事件、數位對應項變更事件,以及將裝置線上狀態事件傳送至內建端點和自訂端點。 深入了解路由端點。 若要深入了解從 IoT 隨插即用裝置傳送的事件,請參閱了解 IoT 隨插即用數位對應項

  • 套用多種查詢篩選資料再將資料傳送到眾多端點。 訊息路由可讓您對訊息屬性和訊息本文,以及裝置對應項標記和裝置對應項屬性進行查詢。 進一步了解使用訊息路由中的查詢

IoT 中樞需要這些服務端點的寫入權限,才能將訊息路由傳送至工作。 如果您透過 Azure 入口網站設定您的端點,則會為您新增必要的權限。 請務必設定您的服務,以支援預期的輸送量。 例如,如果您使用事件中樞作為自訂端點,您必須設定該事件中樞的輸送量單位,以便處理您打算透過 IoT 中樞訊息路由傳送的事件輸入。 同樣地,使用服務匯流排佇列作為端點時,您必須設定 最大大小 ,以確保佇列可以保存所有輸入的資料,直到取用者輸出為止。 當您第一次設定 IoT 解決方案時,可能需要監視其他端點,然後對實際負載進行必要的調整。

IoT 中樞會針對所有裝置到雲端訊息定義常見格式,以在通訊協定之間提供互通性。 如果訊息符合多個指向相同端點的路由,則 IoT 中樞只會將訊息傳遞至該端點一次。 因此,您不需要在您的服務匯流排佇列或主題上設定重複資料刪除。 本教學課程可用來了解如何設定訊息路由

路由端點

IoT 中樞具有預設的內建端點, (與事件中樞相容的 訊息/事件) 。 您可以將訂用帳戶中的其他服務連結至 IoT 中樞,以建立 自訂端點 ,以將訊息路由傳送至 。

只要符合端點的路由查詢,每個訊息就可以路由傳送至所有這些端點。 換句話說,訊息可以路由傳送至多個端點。

如果您的自訂端點有防火牆設定,請考慮使用 Microsoft 信任的第一方例外狀況

IoT 中樞目前支援下列端點︰

  • 內建端點
  • 儲存體容器
  • 服務匯流排佇列和服務匯流排主題
  • 事件中樞
  • Cosmos DB (預覽版)

內建端點做為路由端點

您可以使用標準事件中樞整合和 SDK 接收內建端點 (訊息/事件) 的裝置到雲端訊息。 建立路由之後,除非建立路由至該端點,否則資料會停止流向內建端點。 即使未建立路由,也必須啟用後援路由,才能將訊息路由至內建端點。 如果您使用入口網站或 CLI 建立中樞,則會預設啟用後援。

Azure 儲存體做為路由端點

有兩個儲存體服務 IoT 中樞可以將訊息路由傳送至:Azure Blob 儲存體Azure Data Lake Storage Gen2 (ADLS Gen2) 帳戶。 Azure Data Lake Storage 帳戶是以 Blob 儲存體為基礎所建立,且具備階層命名空間功能的儲存體帳戶。 這兩者都會使用 Blob 作為儲存體。

IoT 中樞支援以 Apache Avro 格式和 JSON 格式將資料寫入 Azure 儲存體。 預設值為 AVRO。 使用 JSON 編碼時,您必須將 contentType 屬性設定為application/json,並將 contentEncoding 屬性設定為訊息系統屬性中的UTF-8。 這兩個值不區分大小寫。 如果未設定內容編碼,則IoT 中樞會以基底 64 編碼格式寫入訊息。

只有在設定了 Blob 儲存體端點時,才能設定編碼格式;無法對現有的端點編輯編碼格式。 若要切換現有端點的編碼格式,您必須先刪除端點,然後使用您想要的格式重新建立它。 或許能派上用場的策略之一,是使用您想要的編碼格式建立新的自訂端點,並將平行路由新增至該端點。 如此一來,您就可以先驗證資料,再刪除現有的端點。

您可以使用 IoT 中樞 Create 或 Update REST API 來選取編碼格式,尤其是 RoutingStorageContainerPropertiesAzure 入口網站Azure CLIAzure PowerShell。 下圖顯示如何在 Azure 入口網站中選取編碼格式。

Blob 儲存體端點編碼。

IoT 中樞會批次處理訊息,然後在批次達到特定大小或經過一段特定時間之後,就將資料寫入儲存體。 「IoT 中樞」預設會採用下列檔案命名慣例:

{iothub}/{partition}/{YYYY}/{MM}/{DD}/{HH}/{mm}

您可以使用任何檔案命名慣例,不過,必須使用所有列出的語彙基元。 如果沒有要寫入的資料,IoT 中樞會寫入空的 Blob。

我們建議列出 Blob 或檔案,然後加以逐一查看,以確保會讀取所有 Blob 或檔案,而不需進行任何分割假設。 分割範圍可能會在 Microsoft 起始的容錯移轉或 IoT 中樞手動容錯移轉期間變更。 您可使用列出 Blob API 來列舉 Blob 清單,或使用列出 ADLS Gen2 API 來列舉檔案清單。 請參閱下列範例做為指引。

public void ListBlobsInContainer(string containerName, string iothub)
{
    var storageAccount = CloudStorageAccount.Parse(this.blobConnectionString);
    var cloudBlobContainer = storageAccount.CreateCloudBlobClient().GetContainerReference(containerName);
    if (cloudBlobContainer.Exists())
    {
        var results = cloudBlobContainer.ListBlobs(prefix: $"{iothub}/");
        foreach (IListBlobItem item in results)
        {
            Console.WriteLine(item.Uri);
        }
    }
}

若要建立與 Azure Data Lake Gen2 相容的儲存體帳戶,請建立新的 V2 儲存體帳戶,然後從 [進階] 索引標籤的[Data Lake Storage Gen2] 區段中選取 [啟用階層命名空間],如下圖所示:

選取 [Azure Date Lake Gen2 儲存體]。

服務匯流排佇列和服務匯流排主題做為路由端點

做為 IoT 中樞端點的服務匯流排佇列和主題不能啟用 [工作階段] 或 [重複偵測]。 如果已啟用其中一個選項,端點會在 Azure 入口網站中顯示為 [無法連線]

做為路由端點的事件中樞

除了內建事件中樞相容端點之外,您也可以將資料傳送至事件中樞類型的自訂端點。

Azure Cosmos DB 作為路由端點, (預覽)

您可以從IoT 中樞將資料直接傳送至 Azure Cosmos DB。 Cosmos DB 是完全受控的超大規模多模型資料庫服務。 它提供低延遲和高可用性,使其成為連線解決方案和製造等需要大量下游資料分析的案例的絕佳選擇。

如果訊息內容類型) 或 Base64 編碼二進位檔中指定,IoT 中樞支援以 JSON (寫入 Cosmos DB。 您可以藉由在 Azure 入口網站 中執行下列步驟,設定訊息路由的 Cosmos DB 端點:

  1. 流覽至您布建的 IoT 中樞。

  2. 在資源功能表中,從中樞設定選取[訊息路由]。

  3. 選取工作窗格中的 [ 自訂端點 ] 索引標籤,然後從下拉式清單中選取 [ 新增 ],然後選擇 [ Cosmos DB (預覽) ]。

    下圖顯示Azure 入口網站工作窗格中的端點新增選項:

    顯示如何新增 Cosmos DB 端點的螢幕擷取畫面。

  4. 端點名稱中輸入 Cosmos DB 端點的名稱。

  5. Cosmos DB 帳戶中,從可供選取的 Cosmos DB 帳戶清單中選擇現有的 Cosmos DB 帳戶,然後分別在 [資料庫 ] 和 [集合] 中選取現有的資料庫和 集合

  6. [產生訊息的綜合分割區索引鍵] 中,選取 [視需要 啟用 ]。

    若要有效地支援大規模的案例,您可以啟用 Cosmos DB 端點 的綜合分割區索引鍵 。 由於 Cosmos DB 是超大規模資料庫資料存放區,因此寫入它的所有資料/檔都必須包含代表邏輯分割區的欄位。 每個邏輯分割區的大小上限為 20 GB。 您可以在分割區索引鍵名稱中指定分割區 索引鍵屬性名稱。 分割區索引鍵屬性名稱是在容器層級定義,一旦設定之後就無法變更。

    您可以根據預估的資料量,在分割 區索引鍵範本 中指定範本,以設定綜合資料分割索引鍵值。 例如,在製造案例中,您的邏輯分割區可能會在一個月內達到其最大限制 20 GB。 在此情況下,您可以將綜合分割區索引鍵定義為裝置識別碼和月份的組合。 產生的分割區索引鍵值會自動新增至每個新 Cosmos DB 記錄的分割區索引鍵屬性,確保每個裝置每個月都會建立邏輯分割區。

  7. [驗證類型] 中,為您的 Cosmos DB 端點選擇驗證類型。 您可以根據系統設定,選擇任何支援的驗證類型來存取資料庫。

    注意

    如果您使用系統指派的受控識別向 Cosmos DB 進行驗證,則必須使用 Azure CLI 或Azure PowerShell將 Cosmos DB 內建資料參與者內建角色定義指派給身分識別。 Azure 入口網站目前不支援 Cosmos DB 的角色指派。 如需各種角色的詳細資訊,請參閱 設定 Azure Cosmos DB 的角色型存取。 若要瞭解透過 CLI 指派角色,請參閱 管理 Azure Cosmos DB SQL 角色資源。

  8. 選取 [建立 ] 以完成自訂端點的建立。

若要深入瞭解如何使用Azure 入口網站來建立 IoT 中樞的訊息路由和端點,請參閱具有IoT 中樞的訊息路由 — Azure 入口網站

讀取已傳送的資料

您可以遵循此教學課程設定路由。

下列教學課程可用來了解如何從端點讀取訊息。

後援路由

後援路由會將任何現有路由上不符合查詢準則的所有訊息傳送至內建端點, (訊息/事件) ,與 事件中樞相容。 如果已啟用訊息路由,您可以啟用後援路由功能。 建立路由之後,除非建立路由至該端點,否則資料會停止流向內建端點。 如果沒有路由傳送至內建端點,且已啟用後援路由,則只會將不符合路由上任何查詢準則的訊息傳送至內建端點。 此外,如果刪除所有現有的路由,則必須啟用後援路由功能,才能在內建端點接收所有資料。

您可以從 [訊息路由] 刀鋒視窗啟用或停用Azure 入口網站中的後援路由。 您也可以使用適用于 FallbackRouteProperties的 Azure Resource Manager,針對後援路由使用自訂端點。

非遙測事件

除了裝置遙測之外,訊息路由也會啟用傳送非遙測事件,包括:

  • 裝置對應項變更事件
  • 裝置生命週期事件
  • 裝置作業生命週期事件
  • 數位分身變更事件
  • 裝置連線狀態事件
  • MQTT 訊息代理程式訊息

例如,如果建立路由,並將資料來源設定為裝置對應項變更事件,IoT 中樞將訊息傳送至包含裝置對應項中變更的端點。 同樣地,如果使用資料來源設定為裝置生命週期事件來建立路由,IoT 中樞傳送訊息,指出是否已刪除或建立裝置或模組。 如需裝置生命週期事件的詳細資訊,請參閱裝置和模組生命週期通知。 使用Azure IoT 隨插即用時,開發人員可以使用設定為Digital Twin Change Events的資料來源建立路由,並IoT 中樞每當設定或變更數位對應項屬性、取代數位對應項時,或基礎裝置對應項發生變更事件時傳送訊息。 最後,如果建立路由且資料來源設定為裝置線上狀態事件,IoT 中樞傳送訊息,指出裝置是否已連線或中斷連線。

IoT 中樞也與 Azure Event Grid 整合發佈裝置事件,以根據這些事件支援即時整合和工作流程自動化。 請參閱訊息路由與事件格線之間的關鍵差異了解何者最適合您的情況。

裝置連線狀態事件的限制

裝置線上狀態事件適用於使用 MQTT 或 AMQP 通訊協定連線的裝置,或使用透過 WebSocket 的其中一種通訊協定。 僅使用 HTTPS 提出的要求不會觸發裝置線上狀態通知。 若要讓 IoT 中樞開始傳送裝置線上狀態事件,開啟連線之後,裝置必須呼叫 cloud-to-device receive message 作業或 device-to-cloud send telemetry 作業。 在 Azure IoT SDK 之外,在 MQTT 中這些作業等同於對應傳訊主題上的 SUBSCRIBE 或 PUBLISH 作業。 透過 AMQP,這些作業等同于在 適當的連結路徑上附加或傳輸訊息。

IoT 中樞不會報告每個個別裝置的連線和中斷連線,而是發佈以週期性 60 秒快照集建立的目前線上狀態。 接收具有相同序號或不同線上狀態事件的相同線上狀態事件,這兩者都表示在 60 秒期間裝置線上狀態發生變更。

測試路由

您建立新的路由或編輯現有的路由時,應該使用範例訊息測試路由查詢。 您可以測試個別的路由,也可以一次測試所有路由,而且沒有任何訊息在測試期間傳送至端點。 Azure 入口網站、Azure Resource Manager、Azure PowerShell 和 Azure CLI 均可用於測試。 結果可協助識別範例訊息符合或不符合查詢,或測試無法執行,因為範例訊息或查詢語法不正確。 若要深入瞭解,請參閱 測試路由測試所有路由

Latency

當您使用內建端點路由裝置到雲端遙測訊息時,在第一個路由建立之後,端對端延遲會稍微增加。

在大部分情況下,延遲的平均增加小於 500 毫秒。 不過,您遭遇的延遲情況可能不同,而且視 IoT 中樞和解決方案架構的層級而定,延遲可能會更高。 您可以使用路由:訊息/事件的訊息延遲d2c.endpoints.latency.builtIn.events IoT 中樞計量來監視延遲。 在第一個路由之後建立或刪除任何路由不會影響端對端延遲。

監視與疑難排解

IoT 中樞提供數個路由和端點相關計量,以讓您概略了解中樞的健全狀況和傳送的訊息。 如需依功能類別細分的所有IoT 中樞計量清單,請參閱監視Azure IoT 中樞資料參考計量一節。 您可以使用 IoT 中樞資源記錄中的 [路由] 類別,追蹤評估路由查詢和端點健全狀況時所發生的錯誤。 若要深入瞭解如何搭配IoT 中樞使用計量和資源記錄,請參閱監視Azure IoT 中樞

您可以使用 REST API 取得端點健康 情況來取得端點的健康 狀態

如需詳細資料和疑難排解路由的支援,請使用路由疑難排解指南

下一步