本文描述與命名空間主題相關的主要概念與功能。
事件
事件是完整說明系統中發生內容的最小量資訊。 事件常被稱為離散事件,因為它代表了一個關於系統的獨特、獨立的事實,並提供可行的洞見。 每個事件都有一般資訊,例如:事件的 source、事件發生的 time,以及唯一識別碼。 每個事件也都有 type一個 ,通常是唯一識別碼,用來描述該事件所用於的公告類型。
例如,在 Azure 儲存體中建立新檔案的相關事件含有該檔案相關詳細資料,例如 lastTimeModified 值。 「事件中樞」事件含有已擷取檔案的 URL。 在「訂單」微服務中,關於新訂單的事件可能具有 orderId 屬性,以及指向訂單狀態表述的 URL 屬性。 事件類型的幾個範例包括:com.yourcompany.Orders.OrderCreated、org.yourorg.GeneralLedger.AccountChanged、io.solutionname.Auth.MaximumNumberOfUserLoginAttemptsReached。
以下是範例事件:
{
"specversion" : "1.0",
"type" : "com.yourcompany.order.created",
"source" : "/orders/account/123",
"subject" : "O-28964",
"id" : "A234-1234-1234",
"time" : "2018-04-05T17:31:00Z",
"comexampleextension1" : "value",
"comexampleothervalue" : 5,
"datacontenttype" : "application/json",
"data" : {
"orderId" : "O-28964",
"URL" : "https://com.yourcompany/orders/O-28964"
}
}
另一種事件
使用者社群也稱攜帶資料點的訊息,例如單一裝置讀取或點擊網頁應用程式頁面,稱為「事件」。你通常會在一段時間內分析這類事件,以獲取洞察並採取行動。 在事件網格文件中,這類事件稱為 資料點、 串流資料,或簡稱 遙測。 Event Grid 的訊息佇列遙測傳輸(MQTT)代理功能使用此類事件,以及其他訊息類型。
支援 CloudEvents
事件網格命名空間主題接受符合雲端原生運算基金會(CNCF)開放標準 CloudEvents 1.0 規範的事件,並使用 HTTP 協定綁定 與 JSON 格式。 CloudEvent 是一種包含通訊內容 (稱為事件資料) 和相關中繼資料的訊息。 事件導向結構中的事件資料通常會帶有宣告系統狀態變更的資訊。 CloudEvents 的元資料包含一組屬性,提供訊息的上下文資訊,例如訊息的來源(來源系統)及其類型。
如需詳細資訊,請參閱 CloudEvents 結構描述的支援。
發行者
發行者是指將事件傳送至事件方格的應用程式。 它可以是事件起源的同一個應用程式,也就是事件來源。 使用命名空間主題時,您可以從自己的應用程式發佈事件。
事件來源
事件來源是事件發生的位置。 每個事件來源都支援一或多個事件類型。 例如,您的應用程式是系統定義的自訂事件來源。 使用命名空間主題時,支援的事件來源是您自己的應用程式。
命名空間
事件方格命名空間是下列資源的管理容器:
| 資源 | 支援的通訊協定 |
|---|---|
| 命名空間主題 | HTTP |
| 主題空間 | MQTT |
| 用戶端 | MQTT |
| 用戶端群組 | MQTT |
| CA 憑證 | MQTT |
| 權限綁定 | MQTT |
透過使用 Azure 事件方格 命名空間,你可以將相關資源分組,並在 Azure 訂閱中將它們作為單一單元管理。 它會為您提供唯一的完整合格網域名稱 (FQDN)。
命名空間會暴露兩個端點:
- 一個 HTTP 端點,透過命名空間主題來支援一般訊息需求。
- MQTT 端點,適用於使用 MQTT 的 IoT 傳訊或解決方案。
命名空間也提供 DNS 整合的網路端點, 另也提供一系列的存取控制和網路整合管理功能,例如 IP 輸入篩選和私人連結。 此外,也是受控識別的容器,用於命名空間中包含的資源。
以下是命名空間的更多要點:
- 命名空間是一種帶有
tags屬性location的追蹤資源。 建立後,你可以在resources.azure.com找到它。 - 命名空間的名稱長度可以是 3-50 個字元。 它可以包含字母數字、連字號(-),且不包含空格。
- 此名稱在每個區域中必須是唯一的。
輸送量單位
輸送量單位 (TU) 會定義命名空間中輸入和輸出的事件速率容量。 如需詳細資訊,請參閱 Azure 事件方格配額和限制。
Autoscale
自動縮放會根據即時流量與資源利用率,自動調整分配給事件網格命名空間的吞吐量單元數量。 它持續監控關鍵績效指標,並在您設定的最低與最大限制內調整產能。 這種行為有助於在工作量高峰期維持穩定表現,並在低活動期間降低成本,無需人工介入。
要使用 Autoscale,請在命名空間啟用並指定:
- 最低吞吐量單位:容量的底線。 命名空間無法縮減到低於這個值。
- 最大吞吐量單元:容量上限。 命名空間無法擴充到超過此值。
Event Grid 評估事件入口、事件出口、MQTT 入站與出站發佈率,以及 MQTT 註冊客戶端數量的利用率。 當任何類別超過擴展閾值時,將佈建更多 TU。 當所有類別都低於縮減閾值時,TU 將被釋放。 縮放操作間的冷卻期可防止快速振盪。
自動擴充功能對於 MQTT 工作負載非常實用,因為隨著裝置的連接和斷開,訊息擴散和訂用帳戶成長可能會迅速變化。 它對於具有突發流量模式的事件代理程式工作負載也很有價值。
關於配置細節及每個 TU 容量限制,請參閱 Autoscale 概覽 與 操作指南。
主題
主題會保存已發佈至事件方格的事件。 您通常會針對相關事件的集合使用主題資源。 命名空間中的主題通常稱為 命名空間主題。
命名空間主題
命名空間主題是在事件方格命名空間內建立的主題。 您的應用程式會將事件發佈至 HTTP 命名空間端點,以指定透過邏輯方式包含已發布事件的命名空間主題。 設計應用程式時,決定要建立多少主題。 對於相對大型的解決方案,請為每個類別的相關事件建立命名空間主題。 例如,請考慮管理使用者帳戶的應用程式,以及關於客戶訂單的另一個應用程式。 不太可能所有事件訂閱者都想要來自這兩個應用程式的事件。 若要區分疑慮,請建立兩個命名空間主題:每個應用程式各一個主題。 讓事件消費者根據其需求訂閱主題。 針對小型解決方案,您可能會偏好將所有事件傳送至單一主題。
命名空間主題支援提取傳遞和推送傳遞。 請參閱使用提取或推送傳遞的時機,以協助您決定推送傳遞是否為符合您需求的正確方法。
事件訂閱
事件訂用帳戶是與單一主題相關聯的設定資源。 其中一項功能是利用活動訂閱設定活動選擇標準,從主題中可選活動集合中定義訂閱者可選的活動集合。 您可以根據訂閱者的需求來篩選事件。 例如,您可以依其事件類型來篩選事件。 如果你用 JSON 物件作為 資料 屬性的值,也可以在事件資料屬性上定義篩選條件。 欲了解更多資源屬性資訊,請參閱事件網格 REST API 文件。
如需建立命名空間主題訂用帳戶的範例,請參閱使用 CLI 使用命名空間主題發佈和取用訊息。
注意事項
命名空間主題下的事件訂閱,與自訂、網域、合作夥伴及系統主題(Event Grid Basic)模型相比,擁有簡化的資源模型。 如需詳細資訊,請參閱建立、檢視及管理事件訂閱。
接收傳遞
您的應用程式可透過提取傳遞連接至事件方格,以使用佇列型語意讀取訊息。 當應用程式連接事件網格以消費事件時,它們控制事件的消費速率與時序。 取用者應用程式也可以在連接到事件方格時使用私人端點,以使用私人 IP 空間讀取事件。
提取傳遞支援下列作業,以讀取訊息和控管訊息狀態:接收、認可、發行、拒絕,以及更新鎖定。 如需詳細資訊,請參閱提取傳遞概觀。
使用拉取傳遞接收事件時的資料結構
當你透過拉取傳遞傳遞事件時,Event Grid 包含一個物件陣列,這些物件又包含 事件 和 brokerProperties 物件。 event 屬性的值是在結構化內容模式下傳送的 CloudEvent。 brokerProperties 物件包含與 CloudEvent 所傳遞相關的鎖令牌。 以下 JSON 物件是 接收 操作的範例回應,回傳兩個事件:
{
"value": [
{
"brokerProperties": {
"lockToken": "CiYKJDUwNjE4QTFFLUNDODQtNDZBQy1BN0Y4LUE5QkE3NjEwNzQxMxISChDXYS23Z+5Hq754VqQjxywE",
"deliveryCount": 2
},
"event": {
"specversion": "1.0",
"id": "A234-1234-1235",
"source": "/mycontext",
"time": "2018-04-05T17:31:00Z",
"type": "com.example.someeventtype",
"data": "some data"
}
},
{
"brokerProperties": {
"lockToken": "CiYKJDUwNjE4QTFFLUNDODQtNDZBQy1BN0Y4LUE5QkE3NjEwNzQxMxISChDLeaL+nRJLNq3/5NXd/T0b",
"deliveryCount": 1
},
"event": {
"specversion": "1.0",
"id": "B688-1234-1235",
"source": "/mycontext",
"type": "com.example.someeventtype",
"time": "2018-04-05T17:31:00Z",
"data": {
"somekey" : "value",
"someOtherKey" : 9
}
}
}
]
}
推送傳遞
使用推送傳遞時,事件方格會將事件傳送至推送事件訂閱 (傳遞模式) 中所設定的目的地。 它提供穩健的重試邏輯,以防目的地無法接收事件。
重要
事件方格命名空間的推送傳遞目前支援以 Azure 事件中樞作為目的地。 在未來,事件方格命名空間將支援更多目的地,包括事件方格基本支援的所有目的地。
事件中樞事件傳遞
Event Grid 使用 Event Hubs SDK 透過 AMQP 將事件傳送到 Event Hubs。 事件會以位元組陣列的形式傳送,陣列中的每個元素都包含 CloudEvent。
推送傳遞與接收傳遞
事件方格支援使用 HTTP 的推送和提取事件傳遞。 您可以透過推送傳遞,在事件訂閱、Webhook 或 Azure 服務中定義目的地,而事件方格會將事件傳送至該目的地。 透過提取式傳遞,訂閱者應用程式會連線到 Event Grid 以取用事件。 Event Grid 命名空間中的主題支援提取式傳遞。
重要
支援將 Event Hubs 作為命名空間主題訂閱的目的地。 在即將推出的版本中,事件方格命名空間將支援事件方格基本中目前適用的所有目的地,以及其他目的地。
何時使用推送傳遞或接收傳遞
以下為協助您決定何時使用接收傳遞或推送傳遞的一般指引。
接收傳遞
- 您需要完整控管接收事件的時機。 例如,您的應用程式可能不會一直處於運作狀態、不夠穩定,或者您在特定時間處理資料。
- 您需要完全掌控事件的取用方式。 例如,取用者應用程式中的下游服務或層級發生問題,導致您無法處理事件。 在此情況下,拉取式傳遞 API 可讓消費者應用程式將已讀取的事件退回給訊息代理程式,以便之後再次傳遞。
- 當接收事件時,您希望使用私人連結,而這僅能透過接收傳遞實現,無法使用推送傳遞。
- 您無法公開端點並使用推送傳遞,但您可以連線至事件方格來取用事件。
推送傳遞
- 您想要避免持續輪詢,以判斷系統狀態變更是否已發生。 您選擇在事件狀態變更時,使用事件方格將事件傳送給您。
- 您有無法進行輸出呼叫的應用程式。 例如,您的組織可能會擔心資料外流。 不過,您的應用程式可以透過公用端點接收事件。
相關內容
- 如需 Event Grid 的簡介,請參閱關於 Event Grid。
- 想開始使用命名空間主題,請參考 「使用命名空間主題發佈活動」。