Bewaarperiode van berichten

Van toepassing op:SQL ServerAzure SQL Managed Instance

Wanneer in een wachtrij wordt opgegeven dat berichten door Service Broker worden behouden, worden berichten pas uit de wachtrij verwijderd zodra het gesprek eindigt. Verder kopieert Service Broker ook uitgaande berichten naar de wachtrij. Hierdoor kan de service een nauwkeurige record van de binnenkomende en uitgaande berichten bijhouden.

Met berichtretentie kunt u een exacte record van een gesprek voor een wachtrij bijhouden terwijl het gesprek actief is. Voor toepassingen waarvoor gedetailleerde controle is vereist of die compenserende transacties moeten uitvoeren wanneer het gesprek mislukt, kan dit handiger zijn dan het kopiëren van elk bericht naar een statustabel terwijl het gesprek wordt uitgevoerd.

De bewaarperiode van berichten verhoogt het aantal berichten in de wachtrij voor actieve gesprekken en verhoogt de hoeveelheid werk die SQL Server uitvoert bij het verzenden van een bericht. Daarom vermindert het bewaren van berichten de prestaties. De exacte invloed op de prestaties is afhankelijk van de communicatiepatronen voor de services die gebruikmaken van de wachtrij. Over het algemeen moet u de bewaarperiode van berichten gebruiken wanneer het bewaren van berichten vereist is om een toepassing correct te laten werken. Als de toepassing geen exacte record vereist van alle verzonden en ontvangen berichten terwijl het gesprek actief is, kan het onderhouden van de status in een statustabel de prestaties verbeteren. Houd er ook rekening mee dat wanneer het gesprek wordt beëindigd, de bewaarde berichten uit de wachtrij worden verwijderd, dus als u bewaarbeleid gebruikt voor controledoeleinden, moet u ervoor zorgen dat u de berichten kopieert naar permanente opslag voordat u het gesprek beëindigt.

Opmerking

Het gebruik van berichtretentie kan de prestaties verminderen. Gebruik deze instelling alleen als de serviceovereenkomst van de toepassing vereist dat de toepassing de exacte verzonden en ontvangen berichten bewaart. Berichten in een wachtrij die klaar zijn om te worden ontvangen, hebben de status 1. De RECEIVE instructie retourneert berichten met een status van 1. Nadat de RECEIVE instructie een bericht heeft geretourneerd, wordt de status ingesteld op 0 en blijft het bericht in de wachtrij staan als de bewaarperiode van het bericht is ingeschakeld. Als het bewaren van berichten is uitgeschakeld, wordt het RECEIVE bericht uit de wachtrij verwijderd. Elke service die gebruikmaakt van de wachtrij slaat zowel inkomende als uitgaande berichten op. In dit geval kopieert de SEND opdracht berichten naar de wachtrij voor de service (met een status of 3) en voegt het bericht toe aan de overdrachtswachtrij. Wanneer het gesprek eindigt, verwijdert de wachtrij alle berichten van het gesprek.

Een toepassing kan hetzelfde bericht niet twee keer ontvangen en een toepassing kan geen bericht ontvangen dat als een uitgaand bericht aan de wachtrij is toegevoegd. Als u wilt werken met bewaarde berichten, gebruikt u een SELECT instructie om een query uit te voeren op de wachtrij. Voor controle voegt een toepassing de bewaarde berichten in een audittabel in voordat het gesprek wordt beëindigd. Voor compenserende transacties werkt een toepassing doorgaans achterwaarts door de verwerkte berichten en wordt het werk voor elk bericht ongedaan gemaakt totdat alle berichten zijn verwerkt.

Zie SELECT voor meer informatie over het gebruik van instructies voor toegang tot een wachtrij.