Pub/sub

Voltooid

Gedistribueerde microservices reageren vaak op gebeurtenissen die voorkomen in andere microservices. Dit patroon wordt meestal gebeurtenisgestuurde architectuur genoemd.

In het scenario van het retailbedrijf moeten de verschillende microservices met elkaar communiceren en reageren op gebeurtenissen van andere microservices. Tegenwoordig slaan ze de adressen handmatig op voor andere microservices, maar deze techniek is lastig te beheren, verhoogt de technische complexiteit en schaalt niet goed.

Application component talking to a growing number of other components.

Gebeurtenisaggregatie met pub/sub

Een gebeurtenisaggregator is een middlewareoplossing waarmee gebeurtenissen in de hele oplossing op een schaalbare en eenvoudige manier worden samengevoegd.

Hier leert u hoe de pub-/subfunctie van Azure Cache voor Redis kan fungeren als middleware om de communicatie tussen onderdelen van uw toepassing te vereenvoudigen. Pub/Sub kan uw toepassingsonderdelen helpen zich te abonneren op andere gebeurtenissen en hun eigen gebeurtenissen te publiceren.

De pub-/subfunctie van Azure Cache voor Redis stuurt berichten tussen toepassingsonderdelen. Microservices kunnen deze functie gebruiken om u te abonneren op berichten of berichten te publiceren. Azure Cache voor Redis de routering van berichten naar de juiste bestemmingen afhandelt zonder dat elke microservice weet waar elk van de berichten naartoe moet gaan.

Deze functie kan de vereiste van microservices die reageren op gebeurtenissen in de hele oplossing aanzienlijk vereenvoudigen.

Abonneren op kanalen

Clients kunnen zich abonneren op een onderwerp of een reeks onderwerpen met behulp van een tekenreekswaarde. In redis-nomenclatuur worden onderwerpen aangeduid als kanalen. Een client die zich wil abonneren op het staff.newhire-kanaal kan bijvoorbeeld de juiste opdracht gebruiken met de staff.newhire tekenreekswaarde.

Zodra de client is geabonneerd, worden alle berichten in het kanaal staff.newhire naar die specifieke client verzonden.

Diagram of subscribe in Azure Cache for Redis.

Diagram van een servertoepassing die een bericht verzendt naar Azure Cache voor Redis en alleen de client zich heeft geabonneerd op het staff.newhire-kanaal dat het bericht ontvangt.

Redis bevat een SUBSCRIBE opdracht die wordt gebruikt om u te abonneren op een of meer kanalen. Deze opdracht is flexibel genoeg om u te abonneren op een door spaties gescheiden lijst met kanalen.

Abonneren op één bekend kanaal

De meest voorkomende use case van de SUBSCRIBE opdracht is om u te abonneren op één kanaal. De opdracht kan bijvoorbeeld worden gebruikt om u te abonneren op het staff.newhire-kanaal .

SUBSCRIBE staff.newhire

Abonneren op meerdere bekende kanalen

De SUBSCRIBE opdracht kan ook worden gebruikt om u tegelijkertijd te abonneren op meerdere kanalen. Als u zich wilt abonneren op meerdere kanalen, scheidt u elk kanaal met één spatie in de lijst met kanalen.

Als voorbeeld van abonneren op meerdere kanalen, gebruikt u de SUBSCRIBE opdracht om u tegelijkertijd te abonneren op de kanalen orders.delete en orders.new .

SUBSCRIBE orders.new orders.delete

Abonneren op een patroon van kanalen

De PSUBSCRIBE opdracht maakt gebruik van glob-stijlpatronen om een client te abonneren op elk kanaal dat overeenkomt met het specifieke patroon. Er zijn drie primaire operators die u kunt gebruiken in een glob-stijlpatroon:

Operator Beschrijving Voorbeeld Overeenkomsten Komt niet overeen
? Komt overeen met één teken l?arn learn, loarn larn, lern
* Komt overeen met alle inhoud (inclusief geen) lear* learn, learaeiou larn, lern
[] Komt alleen overeen met tekens in de lijst le[ao]rn learn, leorn lern, leurn

Gebruik bijvoorbeeld de PSUBSCRIBE opdracht om u te abonneren op alle kanalen die beginnen met een voorvoegsel van de inventaris.

PSUBSCRIBE inventory.*

U kunt ook, als een ander voorbeeld, de PSUBSCRIBE opdracht gebruiken om u te abonneren op alle kanalen met het achtervoegsel . new.

PSUBSCRIBE *.new

In dit voorbeeld wordt de PSUBSCRIBE opdracht gebruikt om u te abonneren op alle kanalen met orders of personeel als een geheel woord in de naam.

PSUBSCRIBE *orders* *staff*

Afmelden bij kanalen

Zodra een klant geen berichten meer van een specifiek kanaal wil ontvangen, moet de client zich afmelden voor dat kanaal of patroon van kanalen.

Redis bevat een UNSUBSCRIBE opdracht om het abonnement van een client uit een of meer kanalen te verwijderen. De opdracht is flexibel genoeg om het afmelden van meerdere kanalen te ondersteunen, zoals de SUBSCRIBE opdracht.

Als u zich wilt afmelden voor een patroon van kanalen, bevat Redis een PUNSUBSCRIBE opdracht die vergelijkbaar is met de PSUBSCRIBE opdracht.

Er zijn drie veelvoorkomende manieren om u af te melden voor een kanaal of kanalen.

Afmelden bij een of meer bekende kanalen

De client kan zich afmelden voor een specifiek kanaal of specifieke kanalen door een of meer kanalen aan de UNSUBSCRIBE opdracht te verstrekken.

UNSUBSCRIBE staff.newhire
UNSUBSCRIBE orders.new orders.delete

Afmelden voor een of meer kanaalpatronen

De client kan zich ook afmelden voor een of meer patronen door elk van deze patronen aan de PUNSUBSCRIBE opdracht te verstrekken.

PUNSUBSCRIBE inventory.*
PUNSUBSCRIBE inventory.* orders.* staff.*

Afmelden voor alle kanalen of patronen van kanalen

Als de client zich wil afmelden voor alle bekende abonnementen, kan de client de UNSUBSCRIBE opdracht zonder argumenten aanroepen.

UNSUBSCRIBE

Met UNSUBSCRIBE de opdracht wordt de client afgemeld voor alle kanalen waarop de client zich specifiek heeft geabonneerd. Met de opdracht wordt de client niet afgemeld voor abonnementen op basis van patronen. De PUNSUBSCRIBE opdracht wordt gebruikt om de client af te melden voor abonnementen op basis van patronen. Roep de PUNSUBSCRIBE opdracht aan zonder argumenten om de client af te melden voor alle abonnementen op basis van patronen.

PUNSUBSCRIBE

Een bericht publiceren naar een kanaal

Elke client kan berichten verzenden door het bericht naar een kanaal te publiceren. Azure Cache voor Redis stuurt het bericht automatisch door naar clients met overeenkomende abonnementen. Als een client bijvoorbeeld een bericht publiceert naar het kanaal orders.new, Azure Cache voor Redis het bericht doorstuurt naar:

  • Clients hebben zich expliciet geabonneerd op het kanaal orders.new
  • Clients die zijn geabonneerd op een patroon dat overeenkomt met orders.new (voorbeeld: orders.*)

Diagram of publish in Azure Cache for Redis.

Diagram van een servertoepassing die een bericht verzendt naar Azure Cache voor Redis op het kanaal orders.new en meerdere clients die het bericht ontvangen op basis van directe abonnementen en abonnementen op basis van patronen.

Redis bevat een opdracht PUBLISH die twee argumenten inneemt. Het eerste argument is de naam van het kanaal waarin het bericht wordt gepubliceerd. Het tweede argument is de tekenreeksinhoud van het bericht.

Bekijk deze twee voorbeelden. De opdracht PUBLISH wordt gebruikt om een bericht te verzenden met de tekenreeksinhoud sad348957298s534gh naar het kanaal orders.delete . De opdracht PUBLISH wordt ook gebruikt voor het verzenden van een bericht met inhoud 02a67b49-9da1-487e-8b49-d5aad3f514ae naar het staff.newhire-kanaal .

PUBLISH orders.delete sad348957298s534gh

PUBLISH staff.newhire 02a67b49-9da1-487e-8b49-d5aad3f514ae

Tip

Als een client zich abonneert op een patroon en een bekend kanaal met overlap, kan de client mogelijk meerdere berichten ontvangen. Denk bijvoorbeeld aan een klant die is geabonneerd op personeel.* en staff.retire. Als een bericht wordt gepubliceerd naar het kanaal staff.retire ; de client ontvangt het bericht twee keer. Eén ontvangstbewijs is voor het bekende kanaalnaamabonnement en de andere is voor het patroonovereenkomstabonnement.