設定無效信件的位置和重試原則
當建立事件訂用帳戶時,您可以自訂事件傳遞的設定。 本文說明如何設定無效信件位置及自訂重試設定。 如需這些功能的相關資訊,請參閱事件方格訊息傳遞和重試。
注意
若要了解訊息傳遞、重試和無效信件,請參閱概念性文章:事件方格訊息傳遞和重試。
設定無效信件位置
若要設定無效信件位置,您必須要有儲存體帳戶用以保存無法傳遞至端點的事件。 範例會取得現有儲存體帳戶的資源識別碼。 它們會建立事件訂閱,使用該儲存體帳戶中的容器作為無效信件端點。
注意
- 在執行本文中的命令之前,請先在儲存體中建立儲存體帳戶和 Blob 容器。
- 事件方格服務會在此容器中建立 Blob。 Blob 的名稱將具有事件方格訂用帳戶的名稱,此名稱為大寫的所有字母。 例如,如果訂閱的名稱為
My-Blob-Subscription
,則無效信件 Blob 的名稱會有MY-BLOB-SUBSCRIPTION
(myblobcontainer/MY-BLOB-SUBSCRIPTION/2019/8/8/5/111111111-1111-1111-1111-111111111111.json
)。 此行為是防止在 Azure 服務之間處理案例的差異。 - 在上述範例中,
.../2019/8/8/5/...
代表非零填補的日期和小時 (UTC):.../YYYY/MM/DD/HH/...
。 - 建立的無效信件 Blob 會在陣列中包含一或多個事件,這是處理無效信件時要考慮的重要行為。
Azure 入口網站
建立事件訂閱時,您可以在 [其他功能] 索引標籤上啟用信件無效化,如下圖所示。 啟用此功能之後,請指定要保存無效信件事件的 Blob 容器,以及具有 Blob 儲存體的 Azure 訂閱。
您可以選擇性地啟用系統指派或使用者指派的受控識別,以進行信件無效化。 此受控識別必須是角色型存取控制 (RBAC) 角色的成員,以允許將事件寫入至儲存體。
您也可以啟用信件無效化,並為現有事件訂閱進行設定。 在您事件訂閱的 [事件訂閱] 頁面上,切換至 [其他功能] 索引標籤以查看無效信件設定,如下圖所示。
Azure CLI
containername=testcontainer
topicid=$(az eventgrid topic show --name demoTopic -g gridResourceGroup --query id --output tsv)
storageid=$(az storage account show --name demoStorage --resource-group gridResourceGroup --query id --output tsv)
az eventgrid event-subscription create \
--source-resource-id $topicid \
--name <event_subscription_name> \
--endpoint <endpoint_URL> \
--deadletter-endpoint $storageid/blobServices/default/containers/$containername
若要關閉無效信件處理,請重新執行命令以建立事件訂閱,但是不提供 deadletter-endpoint
的值。 您不需要刪除事件訂閱。
注意
如果您在本機電腦上使用 Azure CLI,請使用 Azure CLI 2.0.56 版或更新版本。 如需有關如何安裝最新版 Azure CLI 的指示,請參閱安裝 Azure CLI。
PowerShell
$containername = "testcontainer"
$topicid = (Get-AzEventGridTopic -ResourceGroupName gridResourceGroup -Name demoTopic).Id
$storageid = (Get-AzStorageAccount -ResourceGroupName gridResourceGroup -Name demostorage).Id
New-AzEventGridSubscription `
-ResourceId $topicid `
-EventSubscriptionName <event_subscription_name> `
-Endpoint <endpoint_URL> `
-DeadLetterEndpoint "$storageid/blobServices/default/containers/$containername"
若要關閉無效信件處理,請重新執行命令以建立事件訂閱,但是不提供 DeadLetterEndpoint
的值。 您不需要刪除事件訂閱。
注意
如果您在本機計算機上使用 Azure PowerShell,請使用 Azure PowerShell 1.1.0 版或更新版本。 從 Azure 下載中下載並安裝最新的 Azure PowerShell。
設定重試原則
當建立事件方格訂用帳戶時,您可以設定事件方格應該嘗試傳遞事件的時間長度。 依預設,事件方格會嘗試 24 小時 (1440 分鐘) 或 30 次。 您可以為事件方格訂閱設定上述任一值。 事件存留時間的值必須是介於 1 和 1440 的整數。 重試次數上限的值必須是介於 1 到 30 之間的整數。
您無法設定重試排程。
Azure 入口網站
建立事件訂閱時,您可以在 [其他功能] 索引標籤上設定重試原則設定。
您也可以為現有事件訂閱進行重試原則設定。 在您事件訂閱的 [事件訂閱] 頁面上,切換至 [其他功能] 索引標籤以查看重試原則設定,如下圖所示。
Azure CLI
若要將事件存留時間設定為 1440 分鐘以外的值,請使用:
az eventgrid event-subscription create \
-g gridResourceGroup \
--topic-name <topic_name> \
--name <event_subscription_name> \
--endpoint <endpoint_URL> \
--event-ttl 720
若要將重試次數上限設定為 30 以外的值,請使用:
az eventgrid event-subscription create \
-g gridResourceGroup \
--topic-name <topic_name> \
--name <event_subscription_name> \
--endpoint <endpoint_URL> \
--max-delivery-attempts 18
注意
如果您同時設定 event-ttl
和 max-deliver-attempts
,事件方格就會使用前者作為到期條件,來判斷何時停止事件傳遞。 例如,如果您將 30 分鐘設定為存留時間 (TTL) 和 5 次傳遞嘗試上限。 當事件在 30 分鐘後未傳遞 (或) 在 5 次嘗試之後無法傳遞,無論是否為首次發生,事件均為無效信件。 如果您將最大傳遞嘗試設定為 10,相對於 指數重試排程,將會達到 30 分鐘 TTL 之前的最多 6 次傳遞嘗試次數,因此將嘗試次數上限設定為 10 將不會影響此案例,且事件會在 30 分鐘後寄不出。
PowerShell
若要將事件存留時間設定為 1440 分鐘以外的值,請使用:
$topicid = (Get-AzEventGridTopic -ResourceGroupName gridResourceGroup -Name demoTopic).Id
New-AzEventGridSubscription `
-ResourceId $topicid `
-EventSubscriptionName <event_subscription_name> `
-Endpoint <endpoint_URL> `
-EventTtl 720
若要將重試次數上限設定為 30 以外的值,請使用:
$topicid = (Get-AzEventGridTopic -ResourceGroupName gridResourceGroup -Name demoTopic).Id
New-AzEventGridSubscription `
-ResourceId $topicid `
-EventSubscriptionName <event_subscription_name> `
-Endpoint <endpoint_URL> `
-MaxDeliveryAttempt 18
注意
如果您同時設定 event-ttl
和 max-deliver-attempts
,事件方格就會使用前者作為到期條件,來判斷何時停止事件傳遞。 例如,如果您將 30 分鐘設定為存留時間 (TTL) 和 5 次傳遞嘗試上限。 當事件在 30 分鐘後未傳遞 (或) 在 5 次嘗試之後無法傳遞,無論是否為首次發生,事件均為無效信件。 如果您將最大傳遞嘗試設定為 10,相對於 指數重試排程,將會達到 30 分鐘 TTL 之前的最多 6 次傳遞嘗試次數,因此將嘗試次數上限設定為 10 將不會影響此案例,且事件會在 30 分鐘後寄不出。
下一步
- 如需使用 Azure 函式應用程式來處理無效信件事件的範例應用程式,請參閱適用於 .NET 的 Azure 事件方格無效信件範例 \(英文\)。
- 如需事件傳遞和重試的相關資訊,請參閱事件格線訊息傳遞與重試。
- 如需 Event Grid 的簡介,請參閱關於 Event Grid。
- 若要快速地開始使用 Event Grid,請參閱使用 Azure Event Grid 建立和路由傳送自訂事件。