Uitstel van berichten in Azure Service Bus

Wanneer een wachtrij- of abonnementsclient een bericht ontvangt dat het wil verwerken, maar verwerking momenteel niet mogelijk is vanwege speciale omstandigheden, kan de client het ophalen van het bericht naar een later tijdstip uitstellen. Het bericht blijft in de wachtrij of het abonnement staan, maar het wordt apart gehouden.

Wanneer gebruikt u het uitstellen van berichten

Uitstel is een functie die speciaal is gemaakt voor werkstroomverwerkingsscenario's. Voor werkstroomframeworks moeten bepaalde bewerkingen mogelijk in een bepaalde volgorde worden verwerkt. Mogelijk moeten ze de verwerking van sommige ontvangen berichten uitstellen totdat de voorgeschreven voorafgaande werkzaamheden die door andere berichten zijn geïnformeerd, zijn voltooid.

Een eenvoudig illustratief voorbeeld is een orderverwerkingsreeks waarin een betalingsmelding van een externe betalingsprovider wordt weergegeven in een systeem voordat de overeenkomende inkooporder wordt doorgegeven van de winkel aan het uitvoeringssysteem. In dat geval kan het uitvoeringssysteem de verwerking van de betalingsmelding uitstellen totdat er een bestelling is om het te koppelen. In rendez-vousscenario's, waarbij berichten uit verschillende bronnen een werkstroom doorsturen, is de uitvoeringsvolgorde in realtime mogelijk juist, maar de berichten die de resultaten weerspiegelen, komen mogelijk niet in orde.

Uitstel helpt bij het opnieuw ordenen van berichten van de aankomstorder in een volgorde waarin ze kunnen worden verwerkt, terwijl deze berichten veilig in het berichtenarchief blijven wanneer de verwerking moet worden uitgesteld.

Als een bericht niet kan worden verwerkt omdat een bepaalde resource voor het verwerken van dat bericht tijdelijk niet beschikbaar is, maar berichtverwerking niet mag worden onderbroken, kunt u dat bericht enkele minuten opzij zetten. Onthoud het volgnummer in een gepland bericht dat in een paar minuten moet worden geplaatst en haal het uitgesteld bericht opnieuw op wanneer het geplande bericht binnenkomt. Als een berichtenhandler afhankelijk is van een database voor alle bewerkingen en die database tijdelijk niet beschikbaar is, gebruikt u geen uitstel. In plaats daarvan kunt u het ontvangen van berichten helemaal onderbreken totdat de database weer beschikbaar is.

Uitgestelde berichten ophalen

Uitgestelde berichten blijven in de hoofdwachtrij, samen met alle andere actieve berichten (in tegenstelling tot dead-letter-berichten die zich in een subwachtrij bevinden), maar ze kunnen niet langer worden ontvangen via de gebruikelijke ontvangstbewerkingen. U kunt uitgestelde berichten detecteren via het bladeren of bekijken van berichten als een toepassing deze niet meer bijhoudt.

Als u een uitgesteld bericht wilt ophalen, is de eigenaar verantwoordelijk voor het onthouden van het volgnummer bij het uitstellen van het bericht. Elke ontvanger die het volgnummer van een uitgesteld bericht kent, kan het bericht later ontvangen met behulp van ontvangstmethoden die het volgnummer als parameter gebruiken. Zie Berichtvolgorde en tijdstempels voor meer informatie over volgnummers.

Opmerking

Uitgestelde berichten verlopen niet en worden automatisch verplaatst naar een wachtrij met dode letters totdat een client-app deze probeert te ontvangen met behulp van een API en het volgnummer. Dit gedrag is opzettelijk ontworpen. Wanneer een client probeert een uitgesteld bericht op te halen, wordt het gecontroleerd op de verlopen voorwaarde en verplaatst naar een wachtrij met dode letters als het al is verlopen. Een verlopen bericht wordt alleen verplaatst naar een wachtrij met dode letters wanneer de functie voor dode letters is ingeschakeld voor de entiteit (wachtrij of abonnement).

Belangrijkste gedragingen van uitgestelde berichten

  • Uitgestelde berichten blijven in de hoofdwachtrij staan, niet in een subqueue.
  • U moet het volgnummer van het bericht gebruiken om een uitgesteld bericht op te halen.
  • Uitgestelde berichten kunnen worden gedetecteerd via het bladeren door berichten (bekijken).
  • Uitgestelde berichten verlopen pas wanneer een client deze probeert te ontvangen.
  • De verloopcontrole vindt alleen plaats wanneer een client een ontvangst-API aanroept met het volgnummer.

Volgende stappen 

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