使用 Azure Functions 的事件複寫工作和應用程式
提示
針對您需要考慮事件的承載,並加以轉換、彙總、擴充或減少的所有具狀態複寫工作,請使用 Azure 串流分析,而不是 Azure Functions。
如事件複寫和跨區域同盟一文所述,事件中樞配對之間與事件中樞之間,以及事件中樞與其他事件串流來源和目標之間,事件串流的無狀態複寫將憑藉著 Azure Functions。
Azure Functions 是可調整且可靠的執行環境,可用於設定和執行無伺服器應用程式,包括事件複寫和同盟工作。
在此槪觀中,您將了解 Azure Functions 這類應用程式的內建功能,關於您可以針對轉換工作調整和修改的程式碼區塊,以及關於如何設定 Azure Functions 應用程式,使得它可以與事件中樞和其他 Azure 訊息服務理想整合。 對於許多詳細資料,本文將指向 Azure Functions 文件。
什麼是複寫工作?
複寫工作會從來源接收事件,並將事件轉送至目標。 如果來源和目標通訊協定不同,大部分的複寫工作都會將事件原封不動地轉送,最多在中繼資料結構之間執行對應。
複寫工作通常是無狀態,因此不會在工作的連續或平行執行之間共用狀態或其他副作用。 這也適用批次和鏈結,這兩者都可以在串流的現有狀態上實作。
這會讓複寫工作與彙總工作不同,其通常是具狀態的,且是分析架構和服務 (例如 Azure 串流分析) 的網域。
Azure Functions 中的複寫應用程式和工作
在 Azure Functions 中,會使用會從已設定來源取得輸入訊息的觸發程式,以及將從來源複製的訊息轉送至已設定目標的輸出繫結,來實作複寫工作。
複寫工作會透過與任何其他 Azure Functions 應用程式相同的部署方法,部署到複寫應用程式。 您可以對相同的應用程式設定多個工作。
使用 Azure Functions 進階,多個複寫應用程式可以共用相同的基礎資源集區,稱為 App Service 方案。 這表示您可以輕鬆地將使用 .NET 撰寫的複寫工作與使用 Java 撰寫的複寫工作共置。 如果您想要利用僅適用於 Java 的特定程式庫 (例如 Apache Camel),以及如果這些是特定整合路徑的最佳選項,即使您通常偏好針對其他複寫工作使用不同的語言和執行階段,這會是很重要的。
如果有的話,您應該偏好透過觸發程序的批次導向觸發程序來傳遞個別事件或訊息,且您應該一律取得完整事件或訊息結構,而不是依賴 Azure Functions 的參數繫結運算式。
函式的名稱應該反映您要連接的來源和目標的配對,而您應該在具有該名稱的應用程式設定檔中對連接字串或其他設定元素的參考加上首碼。
資料和中繼資料對應
一旦決定一組輸入觸發程序和輸出繫結,就必須在不同的事件或訊息類型之間執行一些對應,除非觸發程序的類型和輸出相同。
針對在事件中樞與服務匯流排之間複製訊息的簡單複寫工作,您不需要撰寫自己的程式碼,但可以依賴於提供複寫範例的公用程式程式庫。
重試原則
若要避免在複寫函式的任一邊的可用性事件期間遺失資料,您必須強固地設定重試原則。 請參閱關於重試的 Azure Functions 文件以設定重試原則。
針對範例存放庫中的範例專案所選擇的原則設定,會設定具有介於 5 秒至 15 分鐘的重試間隔與無限重試次數的指數輪詢策略,以避免資料遺失。
Azure Functions 重試原則的正式發行 (GA) 版本僅支援事件中樞和計時器觸發程序。 所有其他觸發程序的預覽支援均已移除。
設定複寫應用程式主機
複寫應用程式是一或多個複寫工作的執行主機。
它是一項 Azure Functions 應用程式,設定為在取用方案上或 (建議) 在 Azure Functions 進階版方案上執行。 所有複寫應用程式都必須以系統指派或使用者指派受控識別來執行。
連結的 Azure Resource Manager (ARM) 範本會使用下列項目來建立和設定複寫應用程式:
- Azure 儲存體帳戶,用於追蹤複寫進度和記錄。
- 系統指派的受控識別。
- Azure 監視器與 Application Insights 整合以進行監視。
必須存取繫結至 Azure 虛擬網路 (VNet) 之事件中樞的複寫應用程式,必須使用 Azure Functions 進階版方案,並設定為連結至相同的 VNet,其也是其中一個可用的選項。
部署 | 視覺化 | |
---|---|---|
Azure Functions 取用方案 | ||
Azure Functions 進階方案 | ||
Azure Functions 進階方案搭配 VNet |
範例
範例存放庫包含數個複寫工作的範例,其會在事件中樞和/或服務匯流排實體之間複製事件。
針對事件中樞之間的複製事件資料,您可以使用事件中樞觸發程序搭配事件中樞輸出繫結:
[FunctionName("telemetry")]
[ExponentialBackoffRetry(-1, "00:00:05", "00:05:00")]
public static Task Telemetry(
[EventHubTrigger("telemetry", ConsumerGroup = "$USER_FUNCTIONS_APP_NAME.telemetry", Connection = "telemetry-source-connection")] EventData[] input,
[EventHub("telemetry-copy", Connection = "telemetry-target-connection")] EventHubClient outputClient,
ILogger log)
{
return EventHubReplicationTasks.ForwardToEventHub(input, outputClient, log);
}
若要在服務匯流排實體之間複製訊息,您可以使用服務匯流排觸發程序和輸出繫結:
[FunctionName("jobs-transfer")]
[ExponentialBackoffRetry(-1, "00:00:05", "00:05:00")]
public static Task JobsTransfer(
[ServiceBusTrigger("jobs-transfer", Connection = "jobs-transfer-source-connection")] Message[] input,
[ServiceBus("jobs", Connection = "jobs-target-connection")] IAsyncCollector<Message> output,
ILogger log)
{
return ServiceBusReplicationTasks.ForwardToServiceBus(input, output, log);
}
協助程式方法可讓您輕鬆地在事件中樞與服務匯流排之間複寫:
來源 | Target | 進入點 |
---|---|---|
事件中樞 | 事件中樞 | Azure.Messaging.Replication.EventHubReplicationTasks.ForwardToEventHub |
事件中樞 | 服務匯流排 | Azure.Messaging.Replication.EventHubReplicationTasks.ForwardToServiceBus |
服務匯流排 | 事件中樞 | Azure.Messaging.Replication.ServiceBusReplicationTasks.ForwardToEventHub |
服務匯流排 | 服務匯流排 | Azure.Messaging.Replication.ServiceBusReplicationTasks.ForwardToServiceBus |
監視
若要了解如何監視您的複寫應用程式,請參閱 Azure Functions 文件的監視小節。
監視複寫工作的一個特別有用的視覺化工具是 Application Insights 應用程式對應,它是從擷取的監視資訊自動產生,並可讓您探索複寫工作來源和目標傳輸的可靠性和效能。
如需立即的診斷深入解析,您可以使用即時計量入口網站工具,其可提供記錄詳細資料的低延遲視覺效果。