Service Bus-köer, -ämnen och -prenumerationer

Azure Service Bus stöder tillförlitlig meddelandekö och varaktig publicering/prenumeration av meddelanden. De meddelandeentiteter som utgör kärnan i meddelandefunktionerna i Service Bus är köer, ämnen och prenumerationer.

Viktigt

Om du är nybörjare på Azure Service Bus läser du igenom Vad är Azure Service Bus? innan du går igenom den här artikeln.

Köer

Köer erbjuder fifo-meddelandeleverans ( First In, First Out ) till en eller flera konkurrerande konsumenter. Det betyder att mottagarna vanligtvis tar emot och bearbetar meddelanden i den ordning de lades till i kön. Och bara ett meddelande som konsumenten tar emot och bearbetar varje meddelande.

Bild som visar hur tjänstköer fungerar.

En viktig fördel med att använda köer är att uppnå tidsmässig frikoppling av programkomponenter. Med andra ord behöver producenter (avsändare) och konsumenter (mottagare) inte skicka och ta emot meddelanden samtidigt. Det beror på att meddelanden lagras varaktigt i kön. Dessutom behöver producenten inte vänta på att ett svar från konsumenten fortsätter att bearbeta och skicka meddelanden.

En relaterad fördel är belastningsutjämning, som gör det möjligt för producenter och konsumenter att skicka och ta emot meddelanden till olika priser. I många program varierar systembelastningen över tid. Bearbetningstiden som krävs för varje arbetsenhet är dock vanligtvis konstant. Att förmedla meddelandeproducenter och konsumenter med en kö innebär att det förbrukande programmet bara behöver kunna hantera den genomsnittliga belastningen i stället för hög belastning. Köns djup växer och dras samman allt eftersom den inkommande belastningen varierar. Den här funktionen sparar pengar direkt när det gäller hur mycket infrastruktur som krävs för att hantera programbelastningen. När belastningen ökar kan fler arbetsprocesser läggas till för att läsa från kön. Varje meddelande bearbetas bara av en av arbetsprocesserna. Dessutom möjliggör den här pull-baserade belastningsutjämningen bästa möjliga användning av arbetsdatorerna även om arbetsdatorerna med bearbetning av power pull-meddelanden med sin egen maximala hastighet. Det här mönstret kallas ofta för ett konkurrerande konsument-mönster.

Att använda köer till mellanliggande mellan meddelandeproducenter och konsumenter ger en inneboende lös koppling mellan komponenterna. Eftersom producenter och konsumenter inte känner till varandra kan en konsument uppgraderas utan att ha någon effekt på producenten.

Skapa köer

Du kan skapa köer med något av följande alternativ:

Skicka och ta sedan emot meddelanden med klienter skrivna på programmeringsspråk, inklusive följande:

Ta emot lägen

Du kan ange två olika lägen där konsumenter kan ta emot meddelanden från Service Bus.

  • Ta emot och ta bort. När Service Bus i det här läget tar emot begäran från konsumenten markerar det meddelandet som förbrukat och returnerar det till konsumentprogrammet. Det här läget är den enklaste modellen. Det fungerar bäst för scenarier där programmet kan tolerera att ett meddelande inte bearbetas om ett fel inträffar. För att förstå det här scenariot bör du överväga ett scenario där konsumenten utfärdar mottagningsbegäran och sedan kraschar innan den bearbetas. När Service Bus markerar meddelandet som förbrukat börjar programmet använda meddelanden vid omstart. Det kommer att missa meddelandet som det förbrukade före kraschen. Den här processen kallas ofta för bearbetning högst en gång .
  • Granska lås. I det här läget blir mottagningsåtgärden tvåsteg, vilket gör det möjligt att stödja program som inte tolererar meddelanden som saknas.
    1. Hittar nästa meddelande som ska användas, låser det för att förhindra att andra konsumenter tar emot det och returnerar sedan meddelandet till programmet.

    2. När programmet har bearbetat meddelandet begär det att Service Bus-tjänsten slutför den andra fasen av mottagningsprocessen. Sedan markerar tjänsten meddelandet som förbrukat.

      Om programmet av någon anledning inte kan bearbeta meddelandet kan det begära att Service Bus-tjänsten avger meddelandet. Service Bus låser upp meddelandet och gör det tillgängligt att tas emot igen, antingen av samma konsument eller av en annan konkurrerande konsument. För det andra finns det en tidsgräns som är associerad med låset. Om programmet inte kan bearbeta meddelandet innan tidsgränsen för låset upphör att gälla låser Service Bus upp meddelandet och gör det tillgängligt för att tas emot igen.

      Om programmet kraschar efter att det har bearbetat meddelandet, men innan det begär att Service Bus-tjänsten ska slutföra meddelandet, förskjuter Service Bus meddelandet till programmet när det startas om. Den här processen kallas ofta för bearbetning minst en gång . Varje meddelande bearbetas alltså minst en gång. I vissa situationer kan dock samma meddelande skickas på nytt. Om ditt scenario inte kan tolerera duplicerad bearbetning lägger du till ytterligare logik i programmet för att identifiera dubbletter. Mer information finns i Dubblettidentifiering, vilket kallas exakt en gång bearbetning .

      Anteckning

      Mer information om dessa två lägen finns i Lösa mottagningsåtgärder.

Ämnen och prenumerationer

En kö tillåter bearbetning av ett meddelande av en enskild konsument. Till skillnad från köer ger ämnen och prenumerationer en en-till-många-form av kommunikation i ett publicerings- och prenumerationsmönster . Det är användbart för skalning till ett stort antal mottagare. Varje publicerat meddelande görs tillgängligt för varje prenumeration som registrerats med ämnet. Publisher skickar ett meddelande till ett ämne och en eller flera prenumeranter får en kopia av meddelandet.

Bild som visar ett Service Bus-ämne med tre prenumerationer.

Prenumerationerna kan använda ytterligare filter för att begränsa de meddelanden som de vill ta emot. Utgivare skickar meddelanden till ett ämne på samma sätt som de skickar meddelanden till en kö. Men konsumenter får inte meddelanden direkt från ämnet. I stället får konsumenter meddelanden från prenumerationer i ämnet. En ämnesprenumeration liknar en virtuell kö som tar emot kopior av de meddelanden som skickas till ämnet. Konsumenter får meddelanden från en prenumeration på samma sätt som de tar emot meddelanden från en kö.

Funktionen för meddelandesändning i en kö mappar direkt till ett ämne och dess funktioner för meddelandemottagande mappar till en prenumeration. Den här funktionen innebär bland annat att prenumerationer stöder samma mönster som beskrevs tidigare i det här avsnittet om köer: konkurrerande konsument, temporal frikoppling, belastningsutjämning och belastningsutjämning.

Skapa ämnen och prenumerationer

Att skapa ett ämne liknar att skapa en kö enligt beskrivningen i föregående avsnitt. Du kan skapa ämnen och prenumerationer med något av följande alternativ:

Skicka sedan meddelanden till ett ämne och ta emot meddelanden från prenumerationer med klienter skrivna på programmeringsspråk, inklusive följande:

Regler och åtgärder

I många scenarier måste meddelanden som har specifika egenskaper bearbetas på olika sätt. Om du vill aktivera den här bearbetningen kan du konfigurera prenumerationer för att hitta meddelanden som har önskade egenskaper och sedan utföra vissa ändringar av dessa egenskaper. Service Bus-prenumerationer ser alla meddelanden som skickas till ämnet, men det går bara att kopiera en delmängd av dessa meddelanden till den virtuella prenumerationskön. Den här filtreringen utförs med hjälp av prenumerationsfilter. Sådana ändringar kallas filteråtgärder. När en prenumeration skapas kan du ange ett filteruttryck som fungerar på egenskaperna för meddelandet. Egenskaperna kan vara både systemegenskaperna (till exempel Etikett) och anpassade programegenskaper (till exempel StoreName.) SQL-filteruttrycket är valfritt i det här fallet. Utan ett SQL-filteruttryck utförs alla filteråtgärder som definierats för en prenumeration på alla meddelanden för prenumerationen.

Ett fullständigt fungerande exempel finns i TopicFilters-exemplet på GitHub. Mer information om filter finns i Ämnesfilter och åtgärder.

JMS 2.0-entiteter (Java Message Service)

Följande entiteter är tillgängliga via Java Message Service (JMS) 2.0 API.

  • Tillfälliga köer
  • Tillfälliga ämnen
  • Delade varaktiga prenumerationer
  • Ej delade varaktiga prenumerationer
  • Delade icke-varaktiga prenumerationer
  • Ej delade icke-varaktiga prenumerationer

Läs mer om JMS 2.0-entiteter och om hur du använder dem.

Nästa steg

Prova exemplen på det språk du väljer för att utforska Azure Service Bus funktioner.

Hitta exempel för de äldre .NET- och Java-klientbiblioteken nedan: