共用方式為


快速入門:發佈至 Azure 事件方格中的命名空間主題,以及取用其中的事件

在本快速入門中,您會使用 curl bash shell 命令提取傳遞,以發佈、接收和認可事件。 使用 Azure CLI 命令來建立 Azure 事件方格資源。 本文適用於提取傳遞功能的快速測試。

如需使用數據平面 SDK 的範例程式代碼,請參閱下列資源:

如需有關拉取傳遞模型的詳細資訊,請參閱 Azure Event Grid 名稱空間概念HTTP 拉取傳遞 文章。

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

先決條件

  • 本文需要 2.0.70 版或更新版本的 Azure CLI。 如果您使用 Azure Cloud Shell,則已安裝最新版本。

建立資源群組

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

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

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

    resource_group="<your-resource-group-name>"
    
  2. 建立資源群組。 您可以將位置變更為任何 Azure 位置。

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

啟用事件方格資源提供者

  1. 如果這是您第一次在 Azure 訂用帳戶中使用事件方格,您可能需要註冊 Event Grid 資源提供者。 執行下列命令以註冊提供者:

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

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

    registrationStateRegistered 時,就可以繼續。

建立命名空間

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

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

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

    az eventgrid namespace create --resource-group $resource_group --name $namespace --location eastus
    

建立命名空間主題

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

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

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

    az eventgrid namespace topic create --resource-group $resource_group --name $topic --namespace-name $namespace
    

建立事件訂用帳戶

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

  1. 宣告一個變數,以便用來存放命名空間主題的事件訂閱名稱。 若要指定事件訂閱的名稱,請將 <your-event-subscription-name> 替換為您自訂的值。

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

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

將事件傳送至您的主題

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

列出命名空間存取金鑰

  1. 取得與您建立之命名空間相關聯的存取金鑰。 您需要其中一個在發佈事件時進行驗證。 若要列出金鑰,請取得完整的命名空間資源識別碼。 執行下列命令:

    namespace_resource_id=$(az eventgrid namespace show --resource-group $resource_group --name $namespace --query "id" --output tsv)
    
  2. 從命名空間取得第一個索引鍵:

    key=$(az eventgrid namespace list-key --resource-group $resource_group --namespace-name $namespace --query "key1" --output tsv)
    

發佈事件

  1. 擷取命名空間主機名。 您使用它來組成傳送事件用的命名空間 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
    
  2. 建立符合 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

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

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

接收事件

請使用參照事件訂用帳戶的端點從事件方格接收事件。

  1. 執行下列命令來撰寫端點:

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

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

認可事件

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

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

    lockToken="<paste-the-lock-token-here>"
    
  2. 建置認可作業承載,指定您要確認的事件的鎖定權杖。

    acknowledge_request_payload=' { "lockTokens": ["'$lockToken'"]} '
    
  3. 繼續使用認可作業 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
    
  4. 最後,提交要求以認可收到的事件:

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

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

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

後續步驟

若要深入瞭解提取傳遞模型,請參閱 使用 HTTP 提取傳遞