在本快速入門中,您會使用 curl bash shell 命令提取傳遞,以發佈、接收和認可事件。 使用 Azure CLI 命令來建立 Azure 事件方格資源。 本文適用於提取傳遞功能的快速測試。
如需使用數據平面 SDK 的範例程式代碼,請參閱下列資源:
- .NET: 從 Azure 事件方格命名空間主題傳送和接收訊息 (.NET)
- Java: 使用 Java 將事件發佈至命名空間主題
- Java:搭配使用提取傳遞與 Java 來接收事件
如需有關拉取傳遞模型的詳細資訊,請參閱 Azure Event Grid 名稱空間概念 和 HTTP 拉取傳遞 文章。
如果您沒有 Azure 帳戶,請在開始之前建立 免費帳戶 。
先決條件
在 Azure Cloud Shell 中使用 Bash 環境。 如需詳細資訊,請參閱開始使用 Azure Cloud Shell。
若要在本地執行 CLI 參考命令,請安裝 Azure CLI。 如果您正在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱〈如何在 Docker 容器中執行 Azure CLI〉。
如果您使用的是本機安裝,請使用 az login 命令,透過 Azure CLI 來登入。 若要完成驗證程式,請遵循終端機中顯示的步驟。 如需其他登入選項,請參閱 使用 Azure CLI 向 Azure 進行驗證。
出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需擴充功能的詳細資訊,請參閱 使用和管理 Azure CLI 的擴充功能。
執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade。
- 本文需要 2.0.70 版或更新版本的 Azure CLI。 如果您使用 Azure Cloud Shell,則已安裝最新版本。
建立資源群組
使用 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>"建立資源群組。 您可以將位置變更為任何 Azure 位置。
az group create --name $resource_group --location eastus
啟用事件方格資源提供者
如果這是您第一次在 Azure 訂用帳戶中使用事件方格,您可能需要註冊 Event Grid 資源提供者。 執行下列命令以註冊提供者:
az provider register --namespace Microsoft.EventGrid可能需要一點時間才能完成註冊。 若要檢查狀態,請執行下列命令:
az provider show --namespace Microsoft.EventGrid --query "registrationState"當
registrationState是Registered時,就可以繼續。
建立命名空間
事件方格命名空間會提供您張貼事件的使用者定義端點。 下列範例會使用 Azure Cloud Shell 中的 Bash,在您的資源群組中建立命名空間。 命名空間名必須是唯一的,因為它是域名系統 (DNS) 條目的一部分。 命名空間名稱應符合下列規則:
- 它應該介於 3-50 個字元之間。
- 它應該是區域唯一的。
- 僅允許的字元為:a-z、A-Z、0-9 和 -
- 它不應以保留的關鍵詞前置詞
Microsoft、System或EventGrid開頭。
宣告變數來保存事件方格命名空間的名稱。 請將
<your-namespace-name>替換為您的值,以指定命名空間的名稱。namespace="<your-namespace-name>"建立命名空間。 您可能想要變更部署的位置。
az eventgrid namespace create --resource-group $resource_group --name $namespace --location eastus
建立命名空間主題
建立主題,以保存發佈至命名空間端點的所有事件。
宣告變數來保存命名空間主題的名稱。 將
<your-topic-name>取代為您的值,以指定命名空間主題的名稱。topic="<your-topic-name>"建立命名空間主題:
az eventgrid namespace topic create --resource-group $resource_group --name $topic --namespace-name $namespace
建立事件訂用帳戶
建立事件訂用帳戶,將其傳遞模式設定為 佇列,以支援 提取傳遞。 如需所有組態選項的詳細資訊,請參閱 Azure 事件方格 REST API。
宣告一個變數,以便用來存放命名空間主題的事件訂閱名稱。 若要指定事件訂閱的名稱,請將
<your-event-subscription-name>替換為您自訂的值。event_subscription="<your-event-subscription-name>"建立命名空間主題的事件訂用帳戶:
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}}"
將事件傳送至您的主題
依照本節中的步驟,將範例事件傳送至命名空間主題。
列出命名空間存取金鑰
取得與您建立之命名空間相關聯的存取金鑰。 您需要其中一個在發佈事件時進行驗證。 若要列出金鑰,請取得完整的命名空間資源識別碼。 執行下列命令:
namespace_resource_id=$(az eventgrid namespace show --resource-group $resource_group --name $namespace --query "id" --output tsv)從命名空間取得第一個索引鍵:
key=$(az eventgrid namespace list-key --resource-group $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 --resource-group $resource_group --name $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
認可事件
收到事件之後,您會將該事件傳遞至應用程式進行處理。 成功處理事件之後,就不再需要該事件位於事件訂用帳戶中。 若要指示 Event Grid 刪除事件,您應使用在接收作業回應中獲得的鎖定令牌來確認該事件。
在上一個區段中,您已收到回應,其中包含具有
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":[]}
後續步驟
若要深入瞭解提取傳遞模型,請參閱 使用 HTTP 提取傳遞。