M365Con 2027 – gratis online conferentie · 11–22 Jan 2027 · 120 sessions→ m365con.net

Blog · Mirko Peters

Wachtrijen vs. onderwerpen: de juiste messaging-aanpak kiezen in Azure Service Bus

By ·

Welkom terug bij de podcast-companionblog! In onze laatste aflevering zijn we diep ingegaan op de fundamentele elementen van cloudmessaging. Als je nog niet de kans hebt gehad…

Automatically translated with AI from the original post. Read the English original

Cover: Azure Service Bus - Simply Explained

Welkom terug bij de podcastcompanion-blog! In onze laatste aflevering hebben we diep ingegaan op de fundamentele bouwstenen van cloudmessaging. Als je er nog niet naar hebt kunnen luisteren, bekijk dan zeker de aflevering Azure Service Bus - Simply Explained. Vandaag gaan we dieper in op een van de belangrijkste architectuurkeuzes die je maakt bij het bouwen van gedistribueerde applicaties: kiezen tussen Azure Service Bus-wachtrijen en -onderwerpen. Inzicht in de nuances van deze twee messagingpatronen helpt je om veerkrachtigere, schaalbaardere en beter onderhoudbare systemen te ontwerpen.

Inleiding tot Azure Service Bus en messagingpatronen

Nu moderne applicaties wegbewegen van monolithische architecturen naar gedistribueerde, op microservices gebaseerde ontwerpen, wordt betrouwbare communicatie cruciaal. Services kunnen niet zomaar voor alles vertrouwen op synchrone HTTP-aanroepen; dat leidt tot strakke koppeling, cascaderende fouten en prestatieknelpunten. Hier komen cloud-messagebrokers om de hoek kijken.

Azure Service Bus fungeert als een volledig beheerde enterprise-messagebroker die applicaties en services ontkoppelt. Doordat producers berichten kunnen versturen zonder te hoeven weten wie de consument is, of zelfs of de consument op dit moment online is, zorgt Azure Service Bus voor hoge beschikbaarheid en een gelijkmatige verdeling van de werkbelasting. Zodra je kiest voor Azure Service Bus, sta je echter meteen voor een kernvraag over je ontwerp: heb ik een wachtrij of een onderwerp nodig?

Wat is Azure Service Bus?

Voordat we de verschillen tussen wachtrijen en onderwerpen bekijken, is het handig om even stil te staan bij wat Azure Service Bus precies doet. Azure Service Bus is in essentie een messagebroker die berichten veilig opslaat in een namespace totdat een ontvangende applicatie klaar is om ze te verwerken. Het biedt krachtige functies zoals at-least-once-bezorging, sessiebeheer, dead-lettering en het gepland bezorgen van berichten.

In een cloudomgeving overbrugt Azure Service Bus de kloof tussen verschillende onderdelen van je applicatie. Of je nu e-commerceorders verwerkt, Internet of Things (IoT)-telemetrie afhandelt of enterprise resource planning (ERP)-integraties coördineert, Service Bus biedt de duurzaamheid en de asynchrone verwerkingskracht die nodig is om data soepel te laten stromen.

Wachtrijen vs. onderwerpen: de kernkeuze voor je architectuur

Het fundamentele verschil tussen wachtrijen en onderwerpen komt neer op het messagingpatroon dat ze ondersteunen: point-to-point versus publish/subscribe. Een verkeerde keuze kan later leiden tot herwerk in de architectuur, problemen met dubbele data of schaalbaarheidsknelpunten.

Een wachtrij biedt een één-op-één communicatiemodel. Wanneer je een bericht naar een wachtrij stuurt, leest en verwerkt precies één consument dat bericht. Een onderwerp biedt daarentegen een één-op-veel communicatiepatroon. Wanneer je een bericht naar een onderwerp publiceert, wordt het verdeeld over meerdere abonnementen, zodat meerdere onafhankelijke downstreamservices elk een kopie van exact hetzelfde bericht ontvangen en verwerken.

Welk patroon je kiest, hangt volledig af van je bedrijfseisen. Heb je één workload die over workerinstanties moet worden verdeeld voor loadbalancing, of heb je meerdere verschillende systemen die allemaal op één zakelijke gebeurtenis moeten reageren?

Diepgaand: Service Bus-wachtrijen

Service Bus-wachtrijen zijn de werkpaarden van traditionele enterprise-messaging. Ze zijn ontworpen voor scenario's waarin één taak precies één keer door een pool van workers moet worden uitgevoerd.

Wanneer je een bericht naar een wachtrij stuurt, blijft het in die wachtrij staan totdat een ontvanger het ophaalt. Wachtrijen handhaven standaard een strikte First-In, First-Out (FIFO)-bezorgvolgorde. Dit maakt wachtrijen ideaal voor commandogedreven architecturen waarin de volgorde ertoe doet, zoals het verwerken van betalingstransacties of het uitvoeren van opeenvolgende workflowstappen.

Daarnaast blinken wachtrijen uit in load leveling. Als je applicatie een enorme piek in verkeer ervaart, kunnen inkomende aanvragen veilig in de wachtrij ophopen zonder je backend-rekenkracht te overbelasten. Workerservices kunnen berichten dan in een beheersbaar, gelijkmatig tempo uit de wachtrij halen.

Onderwerpen en abonnementen onder de knie krijgen

Terwijl wachtrijen eenvoudige point-to-point-berichtenstromen afhandelen, maken topics het mogelijk om publish/subscribe-architecturen (pub/sub) op te zetten. Een topic fungeert als eindpunt om berichten te versturen, maar kan zonder abonnementen zelf geen berichten vasthouden.

Zie een abonnement als een virtuele wachtrij die aan een topic is gekoppeld. Wanneer een bericht naar een topic wordt gepubliceerd, wordt een kopie van dat bericht afgeleverd aan elk actief abonnement. Elke consumerende service maakt zijn eigen abonnement op het topic aan, zodat die het bericht onafhankelijk van de andere consumers kan verwerken.

Neem bijvoorbeeld een bestelling in een e-commerceplatform. Wanneer een klant een bestelling plaatst, publiceert het systeem een OrderPlaced-bericht naar een topic. De voorraaddienst heeft een abonnement om de voorraadniveaus bij te werken, de facturatiedienst heeft een abonnement om de betaling te verwerken, en de notificatiedienst heeft een abonnement om een e-mailbevestiging te versturen. Alle drie de systemen ontvangen de gebeurtenis tegelijkertijd, zonder elkaar in de weg te zitten.

Berichtfiltering en flexibiliteit

Een van de krachtigste functies van Azure Service Bus-topics is berichtfiltering. In veel pub/sub-scenario's wil een abonnee niet elk bericht dat op een topic wordt gepubliceerd, maar alleen een specifieke subset van gegevens.

Met Azure Service Bus kun je regels en filters op abonnementen definiëren, met SQL-achtige syntaxis of met correlatie-eigenschappen. Je kunt een abonnement bijvoorbeeld zo instellen dat het alleen berichten ontvangt waarbij de eigenschap Region gelijk is aan NorthAmerica, of waarbij de eigenschap OrderAmount een bepaalde drempelwaarde overschrijdt.

Dankzij deze filtermogelijkheid blijft het netwerkverkeer beperkt en verwerken consumers alleen de gegevens die voor hen relevant zijn. Dat vermindert de onnodige rekenbelasting aanzienlijk.

Storingen afhandelen met dead-letter-wachtrijen

Of je nu wachtrijen of topics gebruikt, gedistribueerde systemen zijn gevoelig voor storingen. Wat gebeurt er als een bericht onvolledig is, een afhankelijke database offline gaat, of een applicatie steeds crasht bij het verwerken van één specifiek bericht?

Azure Service Bus pakt dit netjes aan met dead-letter-wachtrijen (DLQ's). Elke wachtrij en elk topicabonnement heeft een bijbehorende subwachtrij, de dead-letter-wachtrij. Als een bericht te vaak niet verwerkt kan worden (het maximale aantal leveringspogingen overschrijdt) of verloopt, verplaatst Service Bus dat bericht automatisch naar de DLQ.

Dit mechanisme isoleert "poison messages" zodat ze de hoofdverwerkingsketen niet blokkeren. Engineers kunnen de DLQ inspecteren, de oorzaak van de storing analyseren, de onderliggende bug oplossen en het bericht vervolgens opnieuw in de hoofdworkflow indienen, zodat het alsnog succesvol verwerkt wordt.

Best practices voor het ontwerpen van gedistribueerde applicaties

Om het meeste uit je Azure Service Bus-implementatie te halen, is het essentieel om gevestigde architectuur-best practices te volgen:

  • Scheid omgevingen: Gebruik afzonderlijke Service Bus-namespaces voor ontwikkel-, test- en productieomgevingen, zodat storingen zich niet over omgevingen heen verspreiden.
  • Implementeer Infrastructure as Code: Definieer je wachtrijen, topics, abonnementen en filters met ARM-templates, Bicep of Terraform, zodat implementaties consistent verlopen.
  • Stel passende bewaarbeleidsregels in: Configureer de time-to-live (TTL) van berichten en de lock-duur op basis van je werkelijke bedrijfsbehoeften, en vertrouw niet blindelings op de standaardmaxima.
  • Monitor en stel waarschuwingen in: Gebruik Azure Monitor en Application Insights om metrics bij te houden, zoals aantallen berichten, actieve dead-letter-berichten en serverlatentie.

Conclusie: kies het juiste patroon voor je architectuur

Het kiezen van het juiste berichtenpatroon in Azure Service Bus is de basis voor het bouwen van robuuste, schaalbare cloudapplicaties. Gebruik wachtrijen wanneer je een betrouwbaar, één-op-één point-to-point-mechanisme nodig hebt om belasting te verdelen en taken achtereenvolgens te verwerken. Kies voor topics en abonnementen wanneer je een publish/subscribe-model nodig hebt om gebeurtenissen uit te zenden naar meerdere onafhankelijke systemen.

Wil je meer discussies horen over cloudarchitectuur, beveiliging en moderne ontwikkelpatronen? Luister dan zeker de volledige aflevering: Azure Service Bus - Simply Explained. Als je deze berichtenpatronen correct integreert, blijven je cloudapplicaties robuust, aanpasbaar en klaar om onder elke belasting te schalen.

Entities in this article

Azure Service Bus Message broker At-least-once delivery Dead-lettering Enterprise resource planning (ERP) High availability HTTP Internet of Things (IoT) Telemetry

Related articles

RSS