Pub/sub
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.
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 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 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.