Händelser
31 mars 23 - 2 apr. 23
Den största utbildningshändelsen för Infrastruktur, Power BI och SQL. 31 mars – 2 april. Använd koden FABINSIDER för att spara 400 USD.
Anmäl dig i dagDen här webbläsaren stöds inte längre.
Uppgradera till Microsoft Edge och dra nytta av de senaste funktionerna och säkerhetsuppdateringarna, samt teknisk support.
Översikten över federationsöversikten och replikeringsfunktionerna förklarar grunderna för och de grundläggande elementen i replikeringsuppgifterna, och vi rekommenderar att du bekantar dig med dem innan du fortsätter med den här artikeln.
I den här artikeln beskriver vi implementeringsvägledningen för flera av de mönster som markerats i översiktsavsnittet.
Replikeringsmönstret kopierar meddelanden från en kö eller ett ämne till nästa, eller från en kö eller ett ämne till något annat mål som en händelsehubb. Meddelandena vidarebefordras utan att göra några ändringar i meddelandets nyttolast.
Implementeringen av det här mönstret omfattas av meddelandereplikeringen till och från Azure Service Bus-exemplet .
Replikeringsmodellen syftar inte till att bevara den absoluta ordningen för meddelanden i en källkö eller ett ämne i en målkö eller ett ämne, utan fokuserar, när det behövs, på att bevara den relativa ordningen på meddelanden där programmet kräver det. Programmet aktiverar detta genom att aktivera sessionsstöd för källentiteten och gruppera relaterade meddelanden med samma sessionsnyckel.
De sessionsmedvetna fördefinierade replikeringsfunktionerna säkerställer att meddelandesekvenser med samma sessions-ID som hämtats från en källentitet skickas till målkön eller ämnet som en batch i den ursprungliga sekvensen och med samma sessions-ID.
Tjänsttilldelade metadata för ett meddelande som hämtas från källkön eller ämnet, den ursprungliga kötiden och sekvensnumret, ersätts av nya tjänsttilldelade värden i målkön eller ämnet, men med standardreplikeringsuppgifterna som anges i våra exempel bevaras de ursprungliga värdena i användaregenskaperna: repl-enqueue-time
(ISO8601 sträng) och repl-sequence
.
Dessa egenskaper är av typen sträng och innehåller det strängifierade värdet för respektive ursprungliga egenskaper. Om meddelandet vidarebefordras flera gånger läggs de tjänsttilldelade metadata för den omedelbara källan till i de redan befintliga egenskaperna, med värden avgränsade med semikolon.
Om du använder replikering i haveriberedskapssyfte, för att skydda mot regionala tillgänglighetsmeddelanden i Service Bus-tjänsten eller mot nätverksavbrott, kräver ett sådant fel att du utför en redundansväxling från en kö eller ett ämne till nästa, vilket uppmanar producenter och/eller konsumenter att använda den sekundära slutpunkten.
För alla redundansscenarier antas det att de nödvändiga elementen i namnrymderna är strukturellt identiska, vilket innebär att köer och ämnen är identiskt namngivna och att regler för signatur för delad åtkomst och/eller rollbaserade regler för åtkomstkontroll konfigureras på samma sätt. Du kan skapa (och uppdatera) ett sekundärt namnområde genom att följa riktlinjerna för att flytta namnområden och utelämna rensningssteget.
För att tvinga producenter och konsumenter att växla måste du göra informationen om vilket namnområde som ska användas tillgängligt för sökning på en plats som är lätt att nå och uppdatera. Om producenter eller konsumenter stöter på frekventa eller beständiga fel bör de konsultera platsen och justera sin konfiguration. Det finns många sätt att dela den konfigurationen, men vi påpekar två i följande: DNS och filresurser.
En kandidatmetod är att lagra informationen i DNS SRV-poster i en DNS som du styr och peka på respektive kö eller ämnesslutpunkter. Tänk på att meddelandehubbar inte tillåter att dess slutpunkter direkt aliaseras med CNAME-poster, vilket innebär att du använder DNS som en elastisk uppslagsmekanism för slutpunktsadresser och inte för att direkt matcha IP-adressinformation.
Anta att du äger domänen example.com
och för ditt program en zon test.example.com
. För två alternativa Service Bus skapar du nu ytterligare två kapslade zoner och en SRV-post i var och en.
SRV-posterna är, enligt vanlig konvention, prefixade med _azure_servicebus._amqp
och innehåller två slutpunktsposter: en för AMQP-over-TLS på port 5671 och en för AMQP-over-WebSockets på port 443, som båda pekar på Service Bus-slutpunkten för namnområdet som motsvarar zonen.
Zon | SRV-post |
---|---|
sb1.test.example.com |
_azure_servicebus._amqp.sb1.test.example.com 1 1 5671 sb1-test-example-com.servicebus.windows.net 2 2 443 sb1-test-example-com.servicebus.windows.net |
sb2.test.example.com |
_azure_servicebus._amqp.sb1.test.example.com 1 1 5671 sb2-test-example-com.servicebus.windows.net 2 2 443 sb2-test-example-com.servicebus.windows.net |
I programmets zon skapar du sedan en CNAME-post som pekar på den underordnade zonen som motsvarar din primära kö eller ditt ämne:
CNAME-post | Alias |
---|---|
servicebus.test.example.com |
sb1.test.example.com |
Med hjälp av en DNS-klient som gör det möjligt att köra frågor mot CNAME- och SRV-poster explicit (de inbyggda klienterna i Java och .NET tillåter endast enkel matchning av namn till IP-adresser) kan du sedan matcha önskad slutpunkt. Med DnsClient.NET är till exempel uppslagsfunktionen:
static string GetServiceBusName(string aliasName)
{
const string SrvRecordPrefix = "_azure_servicebus._amqp.";
LookupClient lookup = new LookupClient();
return (from CNameRecord alias in (lookup.Query(aliasName, QueryType.CNAME).Answers)
from SrvRecord srv in lookup.Query(SrvRecordPrefix + alias.CanonicalName, QueryType.SRV).Answers
where srv.Port == 5671
select srv.Target).FirstOrDefault()?.Value.TrimEnd('.');
}
Funktionen returnerar målvärdnamnet som registrerats för port 5671 i zonen som för närvarande är alias med CNAME enligt ovan.
Om du utför en redundansväxling måste du redigera CNAME-posten och peka den mot den alternativa zonen.
Fördelen med att använda DNS, och särskilt Azure DNS, är att Azure DNS-information replikeras globalt och därför är motståndskraftig mot avbrott i en region.
Den här proceduren liknar hur Service Bus Geo-DR fungerar, men helt under din egen kontroll och fungerar även med aktiva/aktiva scenarier.
Det enklaste alternativet till att använda DNS för att dela slutpunktsinformation är att placera namnet på den primära slutpunkten i en oformaterad textfil och hantera filen från en infrastruktur som är robust mot avbrott och fortfarande tillåter uppdateringar.
Om du redan kör en webbplatsinfrastruktur med hög tillgänglighet med global tillgänglighet och innehållsreplikering lägger du till en sådan fil där och publicerar om filen om det behövs en växel.
Kopplingsmönstret har en eller flera replikeringsuppgifter som pekar på ett mål, eventuellt samtidigt med vanliga producenter som också skickar meddelanden till samma mål.
Varianter av det här mönstret är:
De två första mönstervariationerna är triviala och skiljer sig inte från vanliga replikeringsuppgifter.
Det sista scenariot kräver att redan replikerade meddelanden inte replikeras igen. Tekniken demonstreras och förklaras i det aktiva/aktiva exemplet.
Redigeringsmönstret bygger på replikeringsmönstret , men meddelanden ändras innan de vidarebefordras. Exempel på sådana ändringar är:
Alla dessa mönster kan implementeras med Hjälp av Azure Functions, med hjälp av meddelandehubbarutlösaren för att hämta meddelanden och utdatabindningen för kö eller ämne för att leverera dem.
Routningsmönstret bygger på replikeringsmönstret , men i stället för att ha en källa och ett mål har replikeringsaktiviteten flera mål, vilket illustreras här i C#:
[FunctionName("SBRouter")]
public static async Task Run(
[ServiceBusTrigger("source", Connection = "serviceBusConnectionAppSetting")] ServiceBusReceivedMessage[] messages,
[ServiceBusOutput("dest1", Connection = "serviceBusConnectionAppSetting")] IAsyncCollector<dynamic> output1,
[ServiceBusOutput("dest2", Connection = "serviceBusConnectionAppSetting")] IAsyncCollector<dynamic> output2,
ILogger log)
{
foreach (Message messageData in messages)
{
// send to output1 or output2 based on criteria
}
}
Routningsfunktionen tar hänsyn till meddelandets metadata och/eller meddelandets nyttolast och väljer sedan något av de tillgängliga mål som ska skickas till.
Händelser
31 mars 23 - 2 apr. 23
Den största utbildningshändelsen för Infrastruktur, Power BI och SQL. 31 mars – 2 april. Använd koden FABINSIDER för att spara 400 USD.
Anmäl dig i dagUtbildning
Utbildningsväg
Skapa program för asynkron meddelandekö och serverlösa program i Azure-utbildningsväg - Training
Lär dig hur du skapar tillförlitliga meddelandefunktioner för dina program och hur du kan dra nytta av serverlösa programtjänster i Azure.