本文提供使用
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"
當 是 Registered
時registrationState
,您已準備好繼續。
建立命名空間
事件方格命名空間會提供您張貼事件的使用者定義端點。 下列範例會使用 Azure Cloud Shell 中的 Bash,在您的資源群組中建立命名空間。 命名空間名稱必須是唯一的,因為它是域名系統 (DNS) 專案的一部分。 命名空間名稱應符合下列規則:
它應該介於 3-50 個字元之間。
它應該是區域唯一的。
只有允許的字元是 a-z、A-Z、0-9 和 -
它不應該以、 或 EventGrid
等Microsoft
System
保留的關鍵詞前置詞開頭。
宣告變數來保存事件方格命名空間的名稱。 將 取代 <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":[]}
若要深入瞭解提取傳遞模型,請參閱 提取傳遞概觀。