Service Bus-wachtrijen, -onderwerpen en -abonnementen

Azure Service Bus ondersteunt betrouwbare berichtenwachtrijen en duurzaam publiceren/abonneren op berichten. De berichtenentiteiten die de kern vormen van de berichtenmogelijkheden in Service Bus zijn wachtrijen, onderwerpen en abonnementen.

Belangrijk

Lees wat is Azure Service Bus? door voordat u dit artikel doorloopt als u geen kennis hebt van Azure Service Bus.

Wachtrijen

Wachtrijen bieden fifo-berichten ( First In, First Out ) aan een of meer concurrerende consumenten. Dat wil gezegd dat ontvangers berichten meestal ontvangen en verwerken in de volgorde waarin ze aan de wachtrij zijn toegevoegd. En slechts één bericht dat de consument ontvangt en verwerkt elk bericht.

Afbeelding van de werking van servicewachtrijen.

Een belangrijk voordeel van het gebruik van wachtrijen is het realiseren van tijdelijke ontkoppeling van toepassingsonderdelen. Met andere woorden, de producenten (afzenders) en consumenten (ontvangers) hoeven niet tegelijkertijd berichten te verzenden en te ontvangen. Dat komt omdat berichten duurzaam in de wachtrij worden opgeslagen. Bovendien hoeft de producent niet te wachten op een antwoord van de consument om berichten te blijven verwerken en verzenden.

Een gerelateerd voordeel is load-leveling, waarmee producenten en consumenten berichten kunnen verzenden en ontvangen tegen verschillende tarieven. In veel toepassingen varieert de systeembelasting in de loop van de tijd. De verwerkingstijd die nodig is voor elke werkeenheid is doorgaans echter constant. Door berichtproducenten en consumenten te bemiddelen met een wachtrij, hoeft de verbruikende toepassing alleen de gemiddelde belasting te kunnen verwerken in plaats van piekbelasting. De lengte van de wachtrij neemt toe of af, al naargelang het binnenkomende verkeer. Deze mogelijkheid bespaart direct geld met betrekking tot de hoeveelheid infrastructuur die nodig is om de belasting van de toepassing te verwerken. Naarmate de belasting toeneemt, kunnen er meer werkprocessen worden toegevoegd om uit de wachtrij te lezen. Elk bericht worden door slechts één van de werkprocessen verwerkt. Bovendien maakt deze taakverdeling op basis van pull het beste gebruik van de werkcomputers mogelijk, zelfs als de werkcomputers met verwerkingskracht pull-berichten op hun eigen maximumsnelheid. Dit patroon wordt vaak aangeduid als het concurrerend consumenten-patroon.

Het gebruik van wachtrijen tussen berichtproducenten en consumenten biedt een inherente losse koppeling tussen de onderdelen. Omdat producenten en consumenten zich niet van elkaar bewust zijn, kan een consument worden geüpgraded zonder dat dit gevolgen heeft voor de producent.

Wachtrijen maken

U kunt wachtrijen maken met behulp van een van de volgende opties:

Verzend en ontvang vervolgens berichten met behulp van clients die zijn geschreven in programmeertalen, waaronder de volgende:

Ontvangstmodi

U kunt twee verschillende modi opgeven waarin consumenten berichten van Service Bus kunnen ontvangen.

  • Ontvangen en verwijderen. Wanneer Service Bus in deze modus de aanvraag van de consument ontvangt, wordt het bericht gemarkeerd als verbruikt en wordt het geretourneerd naar de consumententoepassing. Deze modus is het eenvoudigste model. Dit werkt het beste voor scenario's waarin de toepassing het niet verwerken van een bericht kan tolereren als er een fout optreedt. Als u dit scenario wilt begrijpen, kunt u een scenario overwegen waarin de consument de ontvangstaanvraag uitgeeft en vervolgens vastloopt voordat deze wordt verwerkt. Wanneer Service Bus het bericht markeert als verbruikt, begint de toepassing berichten te gebruiken bij het opnieuw opstarten. Het bericht dat vóór het vastlopen is gebruikt, wordt gemist. Dit proces wordt vaak hooguit eenmaal verwerken genoemd.
  • Korte vergrendeling. In deze modus wordt de ontvangstbewerking twee fasen, waardoor het mogelijk is om toepassingen te ondersteunen die geen ontbrekende berichten kunnen tolereren.
    1. Zoekt het volgende bericht dat moet worden gebruikt, vergrendelt het om te voorkomen dat andere gebruikers het ontvangen en retourneert het bericht vervolgens naar de toepassing.

    2. Nadat de toepassing klaar is met het verwerken van het bericht, wordt de Service Bus-service aangevraagd om de tweede fase van het ontvangstproces te voltooien. Vervolgens markeert de service het bericht als verbruikt.

      Als de toepassing het bericht om een of andere reden niet kan verwerken, kan deze de Service Bus-service vragen om het bericht af te zien . Service Bus ontgrendelt het bericht en maakt het beschikbaar om opnieuw te worden ontvangen, door dezelfde consument of door een andere concurrerende consument. Ten tweede is er een time-out gekoppeld aan de vergrendeling. Als de toepassing het bericht niet kan verwerken voordat de time-out voor vergrendeling is verlopen, ontgrendelt Service Bus het bericht en maakt het beschikbaar om opnieuw te worden ontvangen.

      Als de toepassing vastloopt nadat het bericht is verwerkt, maar voordat de Service Bus-service wordt gevraagd het bericht te voltooien, verzendt Service Bus het bericht opnieuw naar de toepassing wanneer deze opnieuw wordt gestart. Dit proces wordt vaak ten minste één keer verwerken genoemd. Dat wil dus dat elk bericht ten minste één keer wordt verwerkt. In bepaalde situaties kan hetzelfde bericht echter opnieuw worden verzonden. Als uw scenario dubbele verwerking niet tolereert, voegt u extra logica toe aan uw toepassing om duplicaten te detecteren. Zie Duplicaatdetectie voor meer informatie. Dit wordt exactly once-verwerking genoemd.

      Notitie

      Zie Ontvangstbewerkingen afhandelen voor meer informatie over deze twee modi.

Onderwerpen en abonnementen

Met een wachtrij kan een bericht door één consument worden verwerkt. In tegenstelling tot wachtrijen bieden onderwerpen en abonnementen een een-op-veel-vorm van communicatie in een publicatie- en abonnementspatroon . Dit is handig voor het schalen naar grote aantallen geadresseerden. Elk gepubliceerd bericht wordt beschikbaar gesteld voor elk abonnement dat is geregistreerd bij het onderwerp. Publisher verzendt een bericht naar een onderwerp en een of meer abonnees ontvangen een kopie van het bericht.

Afbeelding van een Service Bus-onderwerp met drie abonnementen.

De abonnementen kunnen extra filters gebruiken om de berichten te beperken die ze willen ontvangen. Uitgevers verzenden berichten naar een onderwerp op dezelfde manier als ze berichten naar een wachtrij verzenden. Maar consumenten ontvangen berichten niet rechtstreeks van het onderwerp. In plaats daarvan ontvangen consumenten berichten van abonnementen van het onderwerp. Een onderwerpabonnement lijkt op een virtuele wachtrij die kopieën ontvangt van de berichten die naar het onderwerp worden verzonden. Consumenten ontvangen berichten van een abonnement op dezelfde manier als de manier waarop ze berichten ontvangen uit een wachtrij.

De functionaliteit voor het verzenden van berichten van een wachtrij wordt rechtstreeks toegewezen aan een onderwerp en de functionaliteit voor het ontvangen van berichten wordt toegewezen aan een abonnement. Deze functie betekent onder andere dat abonnementen dezelfde patronen ondersteunen die eerder in deze sectie zijn beschreven met betrekking tot wachtrijen: concurrerende consumenten, tijdelijke ontkoppeling, herverdeling van taken en taakverdeling.

Onderwerpen en abonnementen maken

Het maken van een onderwerp is vergelijkbaar met het maken van een wachtrij, zoals beschreven in de vorige sectie. U kunt onderwerpen en abonnementen maken met behulp van een van de volgende opties:

Verzend vervolgens berichten naar een onderwerp en ontvang berichten van abonnementen met behulp van clients die zijn geschreven in programmeertalen, waaronder de volgende:

Regels en acties

In veel scenario's moeten berichten met specifieke kenmerken op verschillende manieren worden verwerkt. Als u deze verwerking wilt inschakelen, kunt u abonnementen configureren om berichten te vinden die de gewenste eigenschappen hebben en vervolgens bepaalde wijzigingen in deze eigenschappen uitvoeren. Hoewel Service Bus-abonnementen alle berichten zien die naar het onderwerp zijn verzonden, is het mogelijk om alleen een subset van deze berichten naar de wachtrij van het virtuele abonnement te kopiëren. Dit filteren wordt uitgevoerd met abonnementsfilters. Dergelijke wijzigingen worden filteracties genoemd. Wanneer een abonnement wordt gemaakt, kunt u een filterexpressie opgeven die werkt op de eigenschappen van het bericht. De eigenschappen kunnen zowel de systeemeigenschappen (bijvoorbeeld Label) als aangepaste toepassingseigenschappen (bijvoorbeeld StoreName) zijn. De SQL-filterexpressie is in dit geval optioneel. Zonder een SQL-filterexpressie wordt elke filteractie die voor een abonnement is gedefinieerd, uitgevoerd op alle berichten voor dat abonnement.

Zie het voorbeeld TopicFilters op GitHub voor een volledig werkend voorbeeld. Zie Onderwerpfilters en -acties voor meer informatie over filters.

Java Message Service (JMS) 2.0-entiteiten

De volgende entiteiten zijn toegankelijk via de Java Message Service (JMS) 2.0-API.

  • Tijdelijke wachtrijen
  • Tijdelijke onderwerpen
  • Gedeelde duurzame abonnementen
  • Niet-gedeelde duurzame abonnementen
  • Gedeelde niet-duurzame abonnementen
  • Niet-gedeelde niet-duurzame abonnementen

Meer informatie over de JMS 2.0-entiteiten en over het gebruik ervan.

Volgende stappen

Probeer de voorbeelden in de taal van uw keuze om Azure Service Bus functies te verkennen.

Hieronder vindt u voorbeelden voor de oudere .NET- en Java-clientbibliotheken: