Stromen

Voltooid

Gedistribueerde microservices willen vaak gegevens of berichten achterlaten zodat andere microservices deze kunnen gebruiken. Veel verschillende consumentenmicroservices willen mogelijk dezelfde berichten gebruiken in een oplossing die groot genoeg is. Dit patroon wordt vaak aangeduid als concurrerende consumentenarchitectuur.

In het scenario van het retailbedrijf moeten microservices berichten asynchroon laten staan om veel klanten te kunnen gebruiken. In het ideale stadium gebruiken deze clients deze gegevens volgens hun planning zonder dat de producent van berichten moet wachten. Tegenwoordig zijn deze microservices ontworpen om gegevens te verzenden en te wachten tot een antwoord rechtstreeks, of bevestiging, om door te gaan met verwerken. Naarmate de retailoplossing wordt geschaald, wordt het steeds belangrijker om een oplossing te ontwerpen en te implementeren waarbij berichtproducenten en consumenten berichten asynchroon kunnen opslaan en parseren zonder te wachten op externe prikkels.

Diagram of microservices manually communicating with each other.

Diagram met drie paren services die met elkaar communiceren en wachten op bevestiging (ack) als onderdeel van een nettolading voor opnieuw afspelen.

Berichtbrokering met streams

Een berichtenbroker is een middlewareoplossing waarmee de distributie van berichtgegevens naar meerdere consumenten wordt beheerd die doorgaans voor dezelfde gegevens concurreren.

Hier leert u hoe de streams-functie van Azure Cache voor Redis kan fungeren als middleware om de opslag van berichten van meerdere producenten en de distributie van berichten naar veel clients te vereenvoudigen. Streams kunnen uw toepassingsonderdelen helpen berichten op een schaalbare, fouttolerante en gedistribueerde manier te beheren.

De functie Streams van Azure Cache voor Redis slaat berichten op in een stream die clients kunnen gebruiken. Microservices kunnen deze functie gebruiken om berichten te distribueren naar veel clients die de microservice mogelijk niet kent op het moment van berichtproductie. Daarnaast kan het aantal berichtgebruikers en producenten afzonderlijk worden geschaald in patronen die zinvol zijn voor een cloudoplossing.

Diagram of Azure Cache for Redis as a message broker.

Diagram met een berichtbroker-implementatie die zich bevindt tussen berichtproducenten en consumenten, geïmplementeerd met behulp van Azure Cache voor Redis.

Deze functie maakt het brokeren van berichten tussen microservices eenvoudiger.

Vermeldingen toevoegen aan een stream

Clients kunnen berichten voor een stream produceren met behulp van een set veldwaardeparen. De client kan een unieke id opgeven wanneer het bericht wordt gemaakt of automatisch door Redis wordt gegenereerd. In Redis-terminologie wordt het bericht aangeduid als een vermelding en is de unieke id de sleutel.

Notitie

Een automatisch gegenereerde sleutel bestaat uit de Unix-tijd van de lokale machine in milliseconden en een volgnummer als er meerdere vermeldingen plaatsvinden binnen de exacte milliseconden. Als de huidige datum en tijd op het lokale apparaat bijvoorbeeld middernacht (UTC) is op 1 december 2010 en de vermelding de derde is die plaatsvond in de huidige milliseconde, is de automatisch gegenereerde sleutel 129116161600000-3.

Redis bevat een XADD opdracht die wordt gebruikt om nieuwe vermeldingen toe te voegen aan een stream. De stream hoeft niet te worden gemaakt voordat de opdracht wordt uitgegeven. Gebruik bijvoorbeeld de XADD opdracht om een nieuwe vermelding toe te voegen aan de stream media.photos.genthumb met behulp van een automatisch gegenereerde sleutel en de volgende gegevens voor veldwaardepaar:

Veld Value
location sd7f9sd7.png
width 300
height 300
XADD media.photos.genthumb * location sd7f9sd7.png width 300 height 300

U kunt ook een specifieke sleutel opgeven die u met de XADD opdracht wilt gebruiken. In dit voorbeeld wordt de XADD opdracht gebruikt om een nieuw item toe te voegen aan de stream media.photos.genthumb met een sleutel van 1596514316945-2 en de volgende gegevens voor veldwaardepaar:

Veld Value
location xczv897.png
filter Grijswaarden
XADD media.photos.genthumb 1596514316945-2 location xczv897.png filter grayscale

Query's uitvoeren op vermeldingen in een stream

Zodra er items in een stream zijn, kunnen clients handmatig het aantal vermeldingen tellen of items rechtstreeks ophalen.

Redis bevat een XRANGE opdracht om alle of een subset van de vermeldingen in een stream rechtstreeks op te halen. Redis bevat ook een XLEN opdracht om het aantal vermeldingen in een specifieke stream te tellen.

Query's uitvoeren op bereiken met vermeldingen

De XRANGE opdracht wordt gebruikt met drie kernparameters:

  • De naam van de stream om een query uit te voeren
  • Het beginpunt van de resultatenset
  • Het eindpuntpunt van de resultatenset

Diagram of a query for a subset of data in a stream.

Diagram waarin een query wordt weergegeven die een subset met vermeldingen tussen twee afzonderlijke tijdwaarden retourneert.

De XRANGE opdracht ondersteunt het gebruik van speciale operators als u het begin of einde van een bereik niet weet of niet wilt opgeven. De - operator wordt gebruikt om aan te geven dat het bereik moet beginnen vanaf het begin, chronologisch, van de stroom. De + operator wordt gebruikt om aan te geven dat het bereik moet doorgaan naar het einde, opnieuw chronologisch, van de stroom.

In een eerste voorbeeld kan de XRANGE opdracht worden gebruikt met twee sleutels om alle chronologisch voorkomende vermeldingen tussen de streams op te halen. In dit codevoorbeeld wordt de XRANGE opdracht gebruikt om alle vermeldingen op te halen in de stream media.photos.genthumb die plaatsvindt vanaf de sleutel 1596514316945-2 en eindigt met de sleutel 1609476184275-0 .

XRANGE media.photos.genthumb 1596514316945-2 1609476184275-0

Als tweede voorbeeld kunnen de + en - operators samen worden gebruikt om alle vermeldingen uit een stream op te halen. In dit voorbeeld wordt dezelfde stroom opgevraagd, maar worden alle vermeldingen opgehaald met behulp van de speciale operators.

XRANGE media.photos.genthumb - +

Vervolgens kunnen de speciale operators afzonderlijk worden gebruikt. In dit voorbeeld gebruikt u de - operator om alle vermeldingen van een stream tot aan de vermelding 1596514316945-2 op te halen.

XRANGE media.photos.genthumb - 1596514316945-2

Dit voorbeeld illustreert het verkrijgen van alle vermeldingen vanaf de vermelding 1596514316945-2 aan het einde van de stream met de + operator.

XRANGE media.photos.genthumb 1596514316945-2 +

De opdracht is ook XREVRANGE beschikbaar met dezelfde syntaxis als de XRANGE opdracht om alle vermeldingen in omgekeerde volgorde op te halen.

XREVRANGE media.photos.genthumb - +
XREVRANGE media.photos.genthumb - 1596514316945-2
XREVRANGE media.photos.genthumb 1596514316945-2 +

Vermeldingen tellen in een stream

De XLEN opdracht is een eenvoudige opdracht die de naam van een stream als argument gebruikt en een geheel getal retourneert met het aantal vermeldingen in de stream.

XLEN media.photos.genthumb

Gegevens uit een stream lezen

Hoewel u gegevens uit Redis als tijdreeks kunt opvragen, is het beter om te luisteren naar nieuwe items uit een stream. Een stream kan veel listeners hebben die wachten op gegevens die zijn opgeslagen in de stream. Als er een nieuwe listener wordt gemaakt nadat de gegevens zijn gestart, kan de listener nog steeds opnieuw beginnen en gegevens verwerken vanaf het begin van de stream.

Gegevens worden gebruikt vanuit een stream met behulp van de XREAD opdracht. Deze opdracht bevat een reeks opties die niet allemaal in deze module worden behandeld. Richt u voorlopig op de mogelijkheid van de XREAD opdracht om een of meer streams te lezen, te beginnen vanaf specifieke punten.

Gegevens lezen vanaf een specifiek startpunt in een stroom

Met de XREAD opdracht, in de eenvoudigste en meest gebruikte vorm, kunt u zich abonneren op vermeldingen uit een stream vanaf het eerste item. De consument verwerkt de vermeldingen vervolgens in de volgorde voordat deze het huidige einde van de stream bereiken. Op dit moment kan de consument wachten op nieuwe gegevens in de stroom.

Als u zich wilt abonneren op gegevens in een stream, moet de XREAD opdracht worden gebruikt met het STREAMS argument en een lijst met streams om samen met de bijbehorende beginpunten te lezen.

In dit voorbeeld wordt de opdracht gebruikt voor het XREAD lezen van gegevens uit de stream media.photos.genthumb vanaf het begin met behulp van de 0-toets . In de meeste gevallen is de 0-sleutel effectief kleiner dan de huidige tijdgebaseerde sleutel.

XREAD STREAMS media.photos.genthumb 0

Als een streamgebruiker het verbruik van berichten om welke reden dan ook moet onderbreken, kan een sleutel worden doorgegeven aan de XREAD opdracht om berichten vanaf een bepaald punt te gaan gebruiken. In dit voorbeeld worden berichten gebruikt, te beginnen met de sleutel 1639714145947-2 .

XREAD STREAMS media.photos.genthumb 1639714145947-2

Tip

Deze techniek is handig als een streamgebruiker om welke reden dan ook vastloopt of mislukt. De XREAD-opdracht kan het lezen van de laatst bekende goede leesbewerking hervatten.

Een andere optie is om de $ operator te gebruiken. Deze specifieke operator geeft aan dat de stream vanaf het einde moet worden gelezen. In dit voorbeeld worden alleen nieuwe vermeldingen ontvangen in plaats van historische items.

XREAD STREAMS media.photos.genthumb $

Gegevens uit meerdere streams lezen

Alle vorige voorbeelden lezen gegevens uit één stream. U herinnert zich misschien dat het argument STREAMS een lijst met streams ondersteunt, samen met de bijbehorende uitgangspunten.

In dit voorbeeld leest de XREAD-opdracht uit zowel de media.photos.genthumb als de media.photos.delete streams tegelijk terwijl beide streams worden gestart vanuit hun chronologische eerste vermeldingen.

XREAD STREAMS media.photos.genthumb media.photos.delete 0 0

Een stream en de bijbehorende gegevens verwijderen

Wanneer gegevens uit een stream worden verbruikt, blijven deze in de stroom totdat ze handmatig worden verwijderd. Met deze implementatie kunnen meerdere clients gegevens uit dezelfde stroom gebruiken zonder dat er gegevens ontbreken.

Als u handmatig een specifieke vermelding uit een stream wilt verwijderen, gebruikt u de opdracht met de XDEL naam van de stream en de sleutel van de vermelding die u wilt verwijderen. In dit voorbeeld wordt de opdracht gebruikt om de XDEL vermelding te verwijderen met een sleutel van 1596514316945-2 uit de stream media.photos.genthumb .

XDEL media.photos.genthumb 1596514316945-2

Als u alle items uit een stream verwijdert, wordt de stream niet verwijderd omdat een lege stroom een volledig juridische constructie is in Redis.

Als u een stream helemaal wilt verwijderen, gebruikt u de opdracht met de DEL naam van de stream.

DEL media.photos.genthumb