Share via


使用 HTTP 提取傳遞

本文是以什麼是 Azure 事件方格?和事件方格概念一文為基礎,在開始使用事件方格的透過 HTTP 提取傳遞之前提供基本資訊。 它涵蓋支援的基本概念、資源模型和訊息傳遞模式。 在本文件結尾,您會找到實用的文章鏈接,引導您瞭解如何使用事件方格,以及提供深入概念資訊的文章。

注意

本文件可協助您開始使用使用 HTTP 通訊協定的事件方格功能。 本文適用於需要在雲端上整合應用程式的使用者。 如果您需要通訊 IoT 裝置數據,請參閱 Azure 事件方格 中的 MQTT Broker 功能概觀

雲端事件

事件方格命名空間主題會接受符合 Cloud Native Computing Foundation (CNCF) 開放式標準 CloudEvents 1.0 規格的事件,並使用具有 JSON 格式的 HTTP 通訊協定系結。

如需詳細資訊, 請參閱 CloudEvents 概念

CloudEvents con 帳篷模式 s

CloudEvents 規格會定義三個您可以使用的 con 帳篷模式binarystructuredbatched

重要

使用任何 con 帳篷模式 您可以交換文字(JSON、text/*等)或二進位編碼事件數據。 二進位 con 帳篷模式 並非專門用來傳送二進位數據。

con 帳篷模式 不是關於您使用的編碼、二進位或文字,而是關於事件數據和其元數據的描述和交換方式。 結構化 con 帳篷模式 使用單一結構,例如 JSON 物件,其中內容屬性和事件數據都在 HTTP 承載中。 二進位 con 帳篷模式 會分隔內容屬性,這些屬性會對應至 HTTP 標頭,以及事件數據,這是根據 中的Content-Type媒體類型值編碼的 HTTP 承載。

如需詳細資訊,請參閱 CloudEvents con 帳篷模式 s

訊息和事件

CloudEvent 通常會攜帶事件數據來宣告系統中發生,也就是系統狀態變更。 不過,您可以使用 CloudEvents 來傳達任何類型的數據。 例如,您可能想要使用 CloudEvents 交換格式,將命令訊息傳送給下游應用程式要求動作。 另一個範例是當您將訊息從事件方格的 MQTT 訊息代理程式路由傳送至主題時。 在此案例中,您會路由將 MQTT 訊息包裝在 CloudEvents 信封中。

提取傳遞

透過提取傳遞,您的應用程式會連線到事件方格,以使用類似佇列的語意讀取 CloudEvents。

提取傳遞提供下列事件取用優點:

  • 以您自己的步調、大規模或以應用程式支援的輸入速率取用事件。

  • 在您自己選擇時取用事件。 例如,根據商務需求,訊息會在夜間處理。

  • 透過私人連結取用事件,讓您的數據使用私人IP空間。

注意

  • 命名空間提供更簡單的資源模型,其中包含單一主題。 目前,Event Grid 支援透過命名空間主題發佈您自己的應用程式事件。 您無法使用命名空間主題,從 Azure 服務或合作夥伴 SaaS 系統取用事件。 您也無法在命名空間中建立系統主題、網域主題或合作夥伴主題。
  • 命名空間主題支援 CloudEvents JSON 格式。

佇列事件訂用帳戶

當接收事件或使用管理事件狀態的作業時,應用程式會指定命名空間 HTTP 端點、主題名稱和佇列事件訂用帳戶的名稱。 佇列事件訂用帳戶的 deliveryMode 已設定為 “queue”。 佇列事件訂用帳戶是用來使用提取傳遞 API 來取用事件。 如需如何建立這些資源的詳細資訊,請參閱建立 命名空間主題事件訂用帳戶

您可以使用事件訂用帳戶來定義事件的篩選準則,並在這麼做時,您可以有效地定義可透過該事件訂用帳戶取用的事件集。 一或多個訂閱者(取用者)應用程式可以連線到相同的命名空間端點,並使用相同的主題和事件訂用帳戶。

使用事件訂閱之發行者和取用者的高階圖表。取用者會使用提取傳遞。

提取傳遞作業

使用提取傳遞時,您的應用程式會使用下列作業。

  • 接收作業是用來使用事件方格的單一要求來讀取一或多個事件。 根據預設,訊息代理程式會等候最多 60 秒的時間,讓事件可供使用。 例如,事件會在第一次發佈時變成可供傳遞。 成功的接收要求會傳回零個或多個事件。 如果事件可供使用,則會傳回最多要求的事件計數。。 事件方格也會針對每個事件讀取傳回鎖定令牌。
  • 鎖定令牌是一種句柄,可識別可用來控制其狀態的事件。
  • 一旦取用者應用程式收到事件並加以處理,就會 認可 該事件。 此作業會指示事件方格刪除事件,使其不會重新傳遞至另一個用戶端。 取用者應用程式會藉由在到期前指定其鎖定令牌,以認可具有單一要求的一或多個令牌。

在某些其他情況下,您的取用者應用程式可能會想要釋放或拒絕事件。

  • 您的取用者應用程式 會釋放 已接收的事件,以向事件方格發出訊號,指出它尚未準備好處理該事件,並使其可供重新傳遞。 其方式是呼叫發行作業,並使用鎖定令牌識別要傳回至事件方格的事件。 您的應用程式可以控制事件是否應立即釋放,或是否應該在事件可供重新傳遞之前使用延遲。

  • 如果條件可能永久,則您可以選擇 拒絕 事件,以防止取用者應用程式處理事件。 例如,格式不正確的訊息可能會因為無法成功剖析而遭到拒絕。 如果有寄不出的信件目的地,則拒絕的事件會是寄不出的。 否則會捨棄它們。

提取傳遞作業執行的範圍

當您叫用接收認可、釋放拒絕更新鎖定作業時,這些動作會在事件訂閱的內容中執行。 例如,如果您認可事件,該事件就無法再透過呼叫 認可 動作時使用的事件訂用帳戶來使用。 其他事件訂用帳戶仍然可以使用「相同」事件。 這是因為事件訂閱會取得已發佈之事件的複本。 這些事件複本在事件訂用帳戶之間實際上彼此不同。 每個事件都有自己的狀態與其他事件無關。

使用提取傳遞接收事件時的數據圖形

使用提取傳遞傳遞傳遞事件時,Event Grid 會包含對象的陣列,而該數位會包含事件brokerProperties 物件。 事件屬性的值是在結構化 con 帳篷模式 中傳遞的 CloudEvent。 brokerProperties 物件包含與 CloudEvent 傳遞相關聯的鎖定令牌。 下列 json 對像是接收作業的範例回應,可傳回兩個事件:

{
    "value": [
        {
            "brokerProperties": {
                "lockToken": "CiYKJDUwNjE4QTFFLUNDODQtNDZBQy1BN0Y4LUE5QkE3NjEwNzQxMxISChDXYS23Z+5Hq754VqQjxywE",
                "deliveryCount": 2
            },
            "event": {
                "specversion": "1.0",
                "id": "A234-1234-1235",
                "source": "/mycontext",
                "time": "2018-04-05T17:31:00Z",
                "type": "com.example.someeventtype",
                "data": "some data"
            }
        },
        {
            "brokerProperties": {
                "lockToken": "CiYKJDUwNjE4QTFFLUNDODQtNDZBQy1BN0Y4LUE5QkE3NjEwNzQxMxISChDLeaL+nRJLNq3/5NXd/T0b",
                "deliveryCount": 1
            },
            "event": {
                "specversion": "1.0",
                "id": "B688-1234-1235",
                "source": "/mycontext",
                "type": "com.example.someeventtype",
                "time": "2018-04-05T17:31:00Z",
                "data": {
                    "somekey" : "value",
                    "someOtherKey" : 9
                }
            }
        }
    ]
}

推送和提取傳遞

事件方格支援使用 HTTP 的推送和提取事件傳遞。 透過 推送傳遞,您會在事件訂用帳戶、Webhook 或 Azure 服務中定義目的地,而事件方格會將事件傳送至該目的地。 透過 提取傳遞,訂閱者應用程式會連線到事件方格以取用事件。 事件方格命名空間中的主題支援提取傳遞。

重要

事件中樞支持作為命名空間主題訂用帳戶的目的地。 在即將推出的版本中,Event Grid 命名空間將支援事件方格 Basic 中目前提供的所有目的地,以及其他目的地。

顯示推送傳遞和提取傳遞的高階圖表,其中包含涉及的資源種類。

使用推送傳遞與提取傳遞的時機

以下是一般指導方針,可協助您決定何時使用提取或推送傳遞。

提取傳遞

  • 您需要完整控制接收事件的時機。 例如,您的應用程式可能一直未啟動、不夠穩定,或在特定時間處理數據。
  • 您需要完全控制事件耗用量。 例如,取用者應用程式中的下游服務或層發生問題,導致您無法處理事件。 在此情況下,提取傳遞 API 可讓取用者應用程式將已讀取的事件釋回訊息代理程式,以便稍後傳遞。
  • 您想要在接收事件時使用 私人連結 ,這隻能與提取傳遞搭配使用,而不是推送傳遞。
  • 您無法公開端點並使用推送傳遞,但您可以連線到事件方格來取用事件。

推送傳遞

  • 您想要避免持續輪詢,以判斷系統狀態變更是否已發生。 您寧願使用事件方格,在發生狀態變更時將事件傳送給您。
  • 您有無法進行輸出呼叫的應用程式。 例如,您的組織可能會擔心數據外流。 不過,您的應用程式可以透過公用端點接收事件。

下一步

下列文章提供如何使用事件方格的資訊,或提供有關概念的其他資訊。