IoT 中樞端點

Azure IoT 中樞 會公開各種端點,以支援與其互動的裝置和服務。

注意

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

IoT 中樞 名稱

您可以在IoT中樞的 [概觀] 工作窗格的 [Azure 入口網站 中找到IoT 中樞的主機名。 根據預設,IoT 中樞的 DNS 名稱看起來像下列範例:

{your iot hub name}.azure-devices.net

用於開發和管理的 IoT 中樞 端點

Azure IoT 中樞 是一項多租用戶服務,可將其功能公開給各種動作專案。 下圖顯示 IoT 中樞 公開的各種端點。

顯示內建 IoT 中樞 端點清單的圖表。

下列清單描述端點:

  • 資源提供者Azure Resource Manager 介面。 此介面可讓 Azure 訂用帳戶擁有者建立和刪除 IoT 中樞,以及更新 IoT 中樞屬性。 IoT 中樞 屬性會控管中樞層級共用存取原則,而不是裝置層級訪問控制,以及雲端到裝置和裝置到雲端傳訊的功能選項。 IoT 中樞 資源提供者也可讓您導出裝置身分識別

  • 裝置身分識別管理:一組 HTTPS REST 端點來管理裝置身分識別(建立、擷取、更新和刪除)。 裝置身分識別 用於裝置驗證和訪問控制。

  • 裝置對應項管理:一組面向服務的 HTTPS REST 端點來查詢和更新裝置對應項(更新標籤和屬性)。

  • 作業管理:一組面向服務的 HTTPS REST 端點來查詢和管理 作業

  • 裝置端點:身分識別登錄中每個裝置的一組端點。 除非有說明,這些端點會使用 MQTT v3.1.1、HTTPS 1.1AMQP 1.0 通訊協議來公開。 AMQP 和 MQTT 也可透過 埠 443 上的 WebSocket 取得。 這些裝置端點包括:

    • 傳送裝置到雲端訊息

    • 接收雲端到裝置訊息

    • 起始檔案上傳

    • 擷取和更新裝置對應項屬性 (不支援 HTTPS)

    • 接收直接方法要求 (不支援 HTTPS)

  • 服務端點:一組端點,可讓解決方案後端與您的裝置通訊。 有一個例外,這些端點只會透過 WebSockets 通訊協定使用 AMQP 和 AMQP 公開。 直接方法調用端點會透過 HTTPS 通訊協議公開。

    • 接收裝置到雲端訊息:此端點是訊息路由概念中討論的內建端點。 後端服務可用它來讀取由您的裝置所傳送的裝置到雲端訊息。 除了這個內建端點外,您可以在 IoT 中樞上建立自訂端點。

    • 傳送雲端到裝置訊息並接收傳遞通知

    • 接收檔案上傳通知

    • 叫用直接方法

Azure IoT 中樞 SDK 一文說明存取這些端點的各種方式。

所有 IoT 中樞 端點都會使用 TLS 通訊協定,而且從未在未加密/不安全的通道上公開任何端點。

重要

在使用 X.509 憑證授權單位 (CA) 驗證的裝置上,下列功能尚未正式推出,務必啟用預覽模式

  • HTTPS、透過 WebSocket 的 MQTT,以及透過 WebSocket 的 AMQP 通訊協定。
  • 檔案上傳 (所有通訊協定)。

這些功能已在使用 X.509 指紋驗證的裝置上正式推出。 若要深入了解使用 IoT 中樞的 X.509 驗證,請參閱支援的 X.509 憑證

訊息路由的自定義端點

您可以將 Azure 訂用帳戶中的現有 Azure 服務連結至 IoT 中樞,以作為訊息路由的端點。 這些端點可做為服務端點,並當作訊息路由的接收器。 裝置無法直接寫入這些端點。 如需訊息路由的詳細資訊,請參閱使用 IoT 中樞 訊息路由將裝置到雲端訊息傳送至不同的端點

IoT 中樞目前支援下列 Azure 服務做為自訂端點:

  • 儲存體容器
  • 事件中樞
  • 服務匯流排佇列
  • 服務匯流排主題
  • Cosmos DB

如需每個中樞端點的限制,請參閱 配額和節流

內建端點

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

Azure 儲存體做為路由端點

有兩個記憶體服務 IoT 中樞 可以將訊息路由傳送至:Azure Blob 儲存體Azure Data Lake 儲存體 Gen2 (ADLS Gen2) 帳戶。 這兩者都會使用 Blob 作為儲存體。

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

只有在設定 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 儲存體 Gen2] 區段中選取 [啟用階層命名空間],如下圖所示:

顯示如何選取 Azure Date Lake Gen2 記憶體的螢幕快照。

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

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

做為路由端點的事件中樞

除了內建事件中樞相容端點之外,您也可以將數據路由傳送至事件中樞類型的自定義端點。

Azure Cosmos DB 作為路由端點

您可以從 IoT 中樞 將數據直接傳送至 Azure Cosmos DB。 IoT 中樞 支援以 JSON 寫入 Cosmos DB(如果在訊息內容類型中指定),或以 Base 64 編碼的二進位檔形式寫入。

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

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

警告

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

端點健康情況

您可以使用 REST API Get Endpoint Health 來取得端點的健全狀態。 我們建議使用與路由訊息延遲相關的 IoT 中樞 路由計量,以識別和偵錯端點健康情況無效或狀況不良時的錯誤,因為當端點處於其中一個狀態時,延遲會更高。 若要深入瞭解如何使用 IoT 中樞 計量,請參閱監視 IoT 中樞

健全狀態 描述
健康 端點會如預期般接受訊息。
不良 端點不接受訊息,IoT 中樞 正在重試將訊息傳送至此端點。
未知 IoT 中樞 未嘗試將訊息傳遞至此端點。
退化 端點接受訊息的速度比預期慢,或正在從狀況不良狀態復原。
IoT 中樞 不再將訊息傳遞至此端點。 重試將訊息傳送至此端點失敗。

下一步

深入了解這些主題: