Aktiviteter och program för meddelandereplikering
Som förklaras i artikeln om meddelandereplikering och federation mellan regioner lutar replikering av meddelandesekvenser mellan par av Service Bus-entiteter och mellan Service Bus och andra meddelandekällor och mål vanligtvis på Azure Functions.
Azure Functions är en skalbar och tillförlitlig körningsmiljö för att konfigurera och köra serverlösa program, inklusive meddelandereplikering och federationsuppgifter .
I den här översikten får du lära dig mer om Azure Functions inbyggda funktioner för sådana program, om kodblock som du kan anpassa och ändra för omvandlingsuppgifter och om hur du konfigurerar ett Azure Functions-program så att det integreras idealiskt med Service Bus och andra Azure Messaging-tjänster. För många detaljer pekar den här artikeln på Azure Functions-dokumentationen.
Vad är en replikeringsaktivitet?
En replikeringsaktivitet tar emot händelser från en källa och vidarebefordrar dem till ett mål. De flesta replikeringsuppgifter vidarebefordrar händelser oförändrade och utför som mest mappning mellan metadatastrukturer om käll- och målprotokollen skiljer sig åt.
Replikeringsuppgifter är vanligtvis tillståndslösa, vilket innebär att de inte delar tillstånd eller andra biverkningar i sekventiella eller parallella körningar av en aktivitet. Det gäller även för batchbearbetning och länkning, som båda kan implementeras ovanpå det befintliga tillståndet för en dataström.
Detta gör att replikeringsuppgifter skiljer sig från aggregeringsuppgifter, som i allmänhet är tillståndskänsliga, och är domänen för analysramverk och tjänster som Azure Stream Analytics.
Replikeringsprogram och uppgifter i Azure Functions
I Azure Functions implementeras en replikeringsuppgift med hjälp av en utlösare som hämtar indatameddelanden från en konfigurerad källa och en utdatabindning som vidarebefordrar meddelanden som kopierats från källan till ett konfigurerat mål.
Replikeringsuppgifter distribueras till replikeringsprogrammet via samma distributionsmetoder som andra Azure Functions-program. Du kan konfigurera flera uppgifter i samma program.
Med Azure Functions Premium kan flera replikeringsprogram dela samma underliggande resurspool, som kallas en App Service-plan. Det innebär att du enkelt kan samordna replikeringsuppgifter som skrivits i .NET med replikeringsuppgifter som är skrivna i Java, till exempel. Det spelar roll om du vill dra nytta av specifika bibliotek som Apache Camel som bara är tillgängliga för Java och om de är det bästa alternativet för en viss integreringsväg, även om du ofta föredrar ett annat språk och körning för dina andra replikeringsuppgifter.
När det är tillgängligt bör du föredra batchorienterade utlösare framför utlösare som levererar enskilda händelser eller meddelanden och du bör alltid hämta den fullständiga händelse- eller meddelandestrukturen i stället för att förlita dig på Azure Functions parameterbindningsuttryck.
Namnet på funktionen bör återspegla det par av källa och mål som du ansluter, och du bör prefixreferenser till niska veze eller andra konfigurationselement i programkonfigurationsfilerna med det namnet.
Data- och metadatamappning
När du har bestämt dig för ett par indatautlösare och utdatabindning måste du utföra viss mappning mellan de olika händelse- eller meddelandetyperna, såvida inte typen av utlösare och utdata är densamma.
För enkla replikeringsuppgifter som kopierar meddelanden mellan Event Hubs och Service Bus behöver du inte skriva din egen kod, utan kan luta dig mot ett verktygsbibliotek som tillhandahålls med replikeringsexemplen.
Återförsöksprincip
För att undvika dataförlust under tillgänglighetshändelsen på båda sidor av en replikeringsfunktion måste du konfigurera återförsöksprincipen så att den är robust. Se Azure Functions-dokumentationen om återförsök för att konfigurera återförsöksprincipen.
De principinställningar som valts för exempelprojekten på exempellagringsplatsen konfigurerar en exponentiell backoff-strategi med återförsöksintervall från 5 sekunder till 15 minuter med oändliga återförsök för att undvika dataförlust.
Den allmänt tillgängliga versionen av återförsöksprinciper för Azure Functions stöder endast Event Hubs- och Timer-utlösare. Förhandsversionsstödet för alla andra utlösare har tagits bort.
Konfigurera en programvärd för replikering
Ett replikeringsprogram är en körningsvärd för en eller flera replikeringsuppgifter.
Det är ett Azure Functions-program som är konfigurerat att köras antingen på förbrukningsplanen eller (rekommenderas) på en Azure Functions Premium-plan. Alla replikeringsprogram måste köras under en systemtilldelad eller användartilldelad hanterad identitet.
De länkade ARM-mallarna (Azure Resource Manager) skapar och konfigurerar ett replikeringsprogram med:
- Ett Azure Storage-konto för att spåra replikeringsförloppet och för loggar.
- En systemtilldelad hanterad identitet.
- Azure Monitor- och Application Insights-integrering för övervakning.
Replikeringsprogram som måste komma åt händelsehubbar som är bundna till ett virtuellt Azure-nätverk (VNet) måste använda Azure Functions Premium-planen och konfigureras för att ansluta till samma virtuella nätverk, vilket också är ett av de tillgängliga alternativen.
Distribuera | Visualisera | |
---|---|---|
Förbrukningsplan för Azure Functions | ||
Azure Functions Premium-plan | ||
Azure Functions Premium-plan med VNet |
Exempel
Exempellagringsplatsen innehåller flera exempel på replikeringsuppgifter som kopierar händelser mellan Event Hubs och/eller mellan Service Bus-entiteter.
För att kopiera händelsedata mellan händelsehubbar använder du en Event Hubs-utlösare med en Event Hubs-utdatabindning:
[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);
}
För att kopiera meddelanden mellan Service Bus-entiteter använder du Service Bus-utlösaren och utdatabindningen:
[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);
}
Hjälpmetoderna kan göra det enkelt att replikera mellan Event Hubs och Service Bus:
Source | Target | Startpunkt |
---|---|---|
Event Hubs | Event Hubs | Azure.Messaging.Replication.EventHubReplicationTasks.ForwardToEventHub |
-händelsehubbar | Service Bus | Azure.Messaging.Replication.EventHubReplicationTasks.ForwardToServiceBus |
Service Bus | -händelsehubbar | Azure.Messaging.Replication.ServiceBusReplicationTasks.ForwardToEventHub |
Service Bus | Service Bus | Azure.Messaging.Replication.ServiceBusReplicationTasks.ForwardToServiceBus |
Övervakning
Mer information om hur du kan övervaka replikeringsappen finns i övervakningsavsnittet i Azure Functions-dokumentationen.
Ett särskilt användbart visuellt verktyg för att övervaka replikeringsuppgifter är Application Insights-programkartan, som genereras automatiskt från den insamlade övervakningsinformationen och gör det möjligt att utforska tillförlitligheten och prestandan för replikeringsaktivitetens källa och målöverföringar.
För omedelbara diagnostikinsikter kan du arbeta med verktyget Live Metrics-portalen , som ger visualisering av logginformation med låg latens.