本文提供使用 curl bashShell命令來發佈、接收和認可事件的提取傳遞的快速簡介。 事件方格資源是使用 CLI 命令建立的。 本文適用於快速測試提取傳遞功能。 如需使用數據平面 SDK 的範例程式代碼,請參閱 .NET 或 Java 範例。 針對 Java,我們會在兩篇文章中提供範例程式代碼: 發佈事件 接收事件 快速入門。 如需提取傳遞模型的詳細資訊,請參閱 概念和 提取傳遞概觀 文章。

如果您沒有 Azure 訂閱 ,請在開始之前,先建立 Azure 免費帳戶

  • Azure Cloud Shell 中使用 Bash 環境。 如需詳細資訊,請參閱 Azure Cloud Shell 中的 Bash 快速入門

  • 若要在本地執行 CLI 參考命令,請 安裝 Azure CLI。 若您在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱〈 如何在 Docker 容器中執行 Azure CLI 〉。

  • 如果您使用的是本機安裝,請使用 az login 命令,透過 Azure CLI 來登入。 請遵循您終端機上顯示的步驟,完成驗證程序。 如需其他登入選項,請參閱 使用 Azure CLI 登入

  • 出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需擴充功能詳細資訊,請參閱 使用 Azure CLI 擴充功能

  • 執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade

    建立資源群組

    使用 az group create 命令建立 Azure 資源群組。 您可以使用此資源群組來包含本文中建立的所有資源。

    使用 Cloud Shell 執行命令的一般步驟如下:

  • 選取 [ 開啟 Cloud Shell ],以查看右窗格中的 [Azure Cloud Shell] 視窗。
  • 複製 命令並貼到 Azure Cloud Shell 視窗中。
  • 按 ENTER 鍵以執行命令。
  • 宣告變數以保存 Azure 資源群組的名稱。 將 取代 <your-resource-group-name> 為您喜歡的值,以指定資源群組的名稱。

    resource_group="<your-resource-group-name>"
    
  • 建立資源群組。 視需要變更位置。

    az group create --name $resource_group --location eastus
    

    啟用事件方格資源提供者

  • 如果您先前尚未在 Azure 訂用帳戶中使用 Event Grid,您可能需要註冊 Event Grid 資源提供者。 執行下列命令來註冊提供者:

    az provider register --namespace Microsoft.EventGrid
    
  • 註冊可能需要一些時間才能完成。 若要檢查狀態,請執行下列命令:

    az provider show --namespace Microsoft.EventGrid --query "registrationState"
    

    當 是 RegisteredregistrationState,您已準備好繼續。

    建立命名空間

    事件方格命名空間會提供您張貼事件的使用者定義端點。 下列範例會使用 Azure Cloud Shell 中的 Bash,在您的資源群組中建立命名空間。 命名空間名稱必須是唯一的,因為它是域名系統 (DNS) 專案的一部分。 命名空間名稱應符合下列規則:

  • 它應該介於 3-50 個字元之間。
  • 它應該是區域唯一的。
  • 只有允許的字元是 a-z、A-Z、0-9 和 -
  • 它不應該以、 或 EventGridMicrosoftSystem保留的關鍵詞前置詞開頭。
  • 宣告變數來保存事件方格命名空間的名稱。 將 取代 <your-namespace-name> 為您想要的值,以指定命名空間的名稱。

    namespace="<your-namespace-name>"
    
  • 建立命名空間。 您可能想要變更其部署位置。

    az eventgrid namespace create -g $resource_group -n $namespace -l eastus
    

    建立命名空間主題

    建立主題,用來保存發佈至命名空間端點的所有事件。

  • 宣告變數來保存命名空間主題的名稱。 將 取代 <your-topic-name> 為您喜歡的值,以指定命名空間主題的名稱。

    topic="<your-topic-name>"
    
  • 建立命名空間主題:

    az eventgrid namespace topic create -g $resource_group -n $topic --namespace-name $namespace 
    

    建立事件訂閱

    建立事件訂用帳戶,將其傳遞模式設定為佇列,以支援提取傳遞。 如需所有組態選項的詳細資訊,請參閱最新的事件方格控制平面 REST API

  • 宣告變數,以保存命名空間主題的事件訂用帳戶名稱。 將 取代 <your-event-subscription-name> 為您喜歡的值,以指定事件訂用帳戶的名稱。

    event_subscription="<your-event-subscription-name>"
    
  • 建立命名空間主題的事件訂用帳戶:

    az eventgrid namespace topic event-subscription create -g $resource_group --topic-name $topic -n $event_subscription --namespace-name $namespace --delivery-configuration "{deliveryMode:Queue,queue:{receiveLockDurationInSeconds:300,maxDeliveryCount:4,eventTimeToLive:P1D}}"
    

    將事件傳送至您的主題

    現在,依照本節中的步驟,將範例事件傳送至命名空間主題。

    列出命名空間存取金鑰

  • 取得與您建立之命名空間相關聯的存取金鑰。 您可以在發佈事件時使用其中一個來進行驗證。 若要列出金鑰,您必須先取得完整的命名空間資源識別碼。 執行下列命令以取得它:

    namespace_resource_id=$(az eventgrid namespace show -g $resource_group -n $namespace --query "id" --output tsv)
    
  • 從命名空間取得第一個索引鍵:

    key=$(az eventgrid namespace list-key -g $resource_group --namespace-name $namespace --query "key1" --output tsv)
    
  • 擷取命名空間主機名。 您可以使用它來撰寫傳送事件的命名空間 HTTP 端點。 API 版本 2023-06-01-preview會先提供下列作業。

    publish_operation_uri="https://"$(az eventgrid namespace show -g $resource_group -n $namespace --query "topicsConfiguration.hostname" --output tsv)"/topics/"$topic:publish?api-version=2023-06-01-preview
    
  • 建立符合 CloudEvents 規範事件的範例

    event=' { "specversion": "1.0", "id": "'"$RANDOM"'", "type": "com.yourcompany.order.ordercreatedV2", "source" : "/mycontext", "subject": "orders/O-234595", "time": "'`date +%Y-%m-%dT%H:%M:%SZ`'", "datacontenttype" : "application/json", "data":{ "orderId": "O-234595", "url": "https://yourcompany.com/orders/o-234595"}} '
    

    元素 data 是您事件的承載。 任何格式正確的 JSON 都可以在此欄位中執行。 如需可在事件中執行之屬性(也稱為內容屬性)的詳細資訊,請參閱 CloudEvents 規格。

  • 使用 CURL 將事件傳送至主題。 CURL 是傳送 HTTP 要求的公用程式。

    curl -X POST -H "Content-Type: application/cloudevents+json" -H "Authorization:SharedAccessKey $key" -d "$event" $publish_operation_uri
    

    您可以使用參考事件訂用帳戶的端點,從事件方格接收事件。

  • 執行下列命令來撰寫該端點:

    receive_operation_uri="https://"$(az eventgrid namespace show -g $resource_group -n $namespace --query "topicsConfiguration.hostname" --output tsv)"/topics/"$topic/eventsubscriptions/$event_subscription:receive?api-version=2023-06-01-preview
    
  • 提交要求以取用事件:

    curl -X POST -H "Content-Type: application/json" -H "Authorization:SharedAccessKey $key" $receive_operation_uri
    

    收到事件之後,您會將該事件傳遞至應用程式進行處理。 成功處理事件之後,就不再需要該事件位於事件訂用帳戶中。 若要指示事件方格刪除事件,您可以使用 接收作業回應上取得的鎖定令牌來確認 事件。

  • 在上一個步驟中,您應該已收到回應,其中包含 brokerProperties 具有 lockToken 屬性的物件。 複製鎖定令牌值,並將它設定在環境變數上:

    lockToken="<paste-the-lock-token-here>"
    
  • 現在,建置認可作業承載,以指定您想要認可之事件的鎖定令牌。

    acknowledge_request_payload=' { "lockTokens": ["'$lockToken'"]} '
    
  • 使用認可作業 URI 繼續建置字串:

    acknowledge_operation_uri="https://"$(az eventgrid namespace show -g $resource_group -n $namespace --query "topicsConfiguration.hostname" --output tsv)"/topics/"$topic/eventsubscriptions/$event_subscription:acknowledge?api-version=2023-06-01-preview
    
  • 最後,提交要求以認可收到的事件:

    curl -X POST -H "Content-Type: application/json" -H "Authorization:SharedAccessKey $key" -d "$acknowledge_request_payload" $acknowledge_operation_uri
    

    如果在鎖定令牌到期之前執行認可作業(當我們建立事件訂閱時所設定的 300 秒),您應該會看到類似下列範例的回應:

    {"succeededLockTokens":["CiYKJDQ4NjY5MDEyLTk1OTAtNDdENS1BODdCLUYyMDczNTYxNjcyMxISChDZae43pMpE8J8ovYMSQBZS"],"failedLockTokens":[]}
    

    若要深入瞭解提取傳遞模型,請參閱 提取傳遞概觀

  •