Detectie van duplicaten

Als een toepassing mislukt vanwege een onoorbare fout direct na het verzenden van een bericht en het opnieuw gestarte exemplaar van de toepassing ten onrechte denkt dat de eerdere levering van het bericht niet heeft plaatsgevonden, zorgt een volgende verzending ervoor dat hetzelfde bericht twee keer in het systeem wordt weergegeven.

Het is ook mogelijk dat er een fout optreedt op client- of netwerkniveau en dat een verzonden bericht wordt vastgelegd in de wachtrij, zonder dat de bevestiging naar de client is geretourneerd. In dit scenario heeft de client geen twijfel over het resultaat van de verzendbewerking.

Duplicaatdetectie neemt de twijfel weg uit deze situaties door in te stellen dat de afzender hetzelfde bericht opnieuw moet verzenden en eventuele dubbele kopieën worden verwijderd uit de wachtrij of het onderwerp.

Notitie

De basislaag van Service Bus biedt geen ondersteuning voor duplicaatdetectie. De lagen Standard en Premium bieden ondersteuning voor duplicaatdetectie. Zie Prijzen voor Service Bus verschillen tussen deze lagen.

Uitleg

Door detectie van duplicaten in te stellen, kunt u de door de toepassing beheerde MessageId bijhouden van alle berichten die tijdens een opgegeven periode naar een wachtrij of onderwerp worden verzonden. Als er een nieuw bericht wordt verzonden met een MessageId die is geregistreerd tijdens het tijdvenster, wordt het bericht gerapporteerd als geaccepteerd (de verzendbewerking slaagt), maar het zojuist verzonden bericht wordt onmiddellijk genegeerd en verwijderd. Andere onderdelen van het bericht dan de MessageId worden niet in aanmerking genomen.

Toepassingsbeheer van de id is essentieel, omdat de toepassing alleen op die manier de MessageId kan binden aan een context van het bedrijfsproces van waaruit deze kan worden gereconstrueerd wanneer er een fout optreedt.

Voor een bedrijfsproces waarin meerdere berichten worden verzonden tijdens het verwerken van een toepassingscontext, kan de MessageId een samengestelde context-id op toepassingsniveau zijn, zoals een inkoopordernummer en het onderwerp van het bericht, bijvoorbeeld 12345.2017/payment.

De MessageId kan altijd een GUID zijn, maar het veankeren van de id voor het bedrijfsproces levert voorspelbare herhaalbaarheid op, wat gewenst is voor het effectief gebruik van de functie voor duplicaatdetectie.

Belangrijk

  • Wanneer partitioneren is ingeschakeld, wordt MessageId+PartitionKey gebruikt om de uniekheid te bepalen. Wanneer sessies zijn ingeschakeld, moeten de partitiesleutel en sessie-id hetzelfde zijn.
  • Wanneer partitioneren is uitgeschakeld (standaard), wordt alleen MessageId gebruikt om de uniekheid te bepalen.
  • Zie Use of partition keys (Gebruik van partitiesleutels) voor meer informatie over SessionId, PartitionKey en MessageId.
  • De premier-laag biedt geen ondersteuning voor partitionering. Daarom raden we u aan unieke bericht-ID's in uw toepassingen te gebruiken en niet afhankelijk te zijn van partitiesleutels voor duplicaatdetectie.

Grootte van venster voor duplicaatdetectie

Naast het alleen inschakelen van duplicaatdetectie kunt u ook de grootte configureren van het tijdvenster voor de detectiegeschiedenis van duplicaten waarin bericht-id's worden bewaard. Deze waarde wordt standaard ingesteld op 10 minuten voor wachtrijen en onderwerpen, met een minimumwaarde van 20 seconden tot de maximumwaarde van 7 dagen.

Het inschakelen van duplicaatdetectie en de grootte van het venster hebben rechtstreeks invloed op de doorvoer van de wachtrij (en het onderwerp), omdat alle vastgelegde bericht-id's moeten worden afgestemd op de zojuist verzonden bericht-id.

Als u het venster klein houdt, betekent dit dat er minder bericht-id's moeten worden bewaard en gematcht en dat de doorvoer minder wordt beïnvloed. Voor entiteiten met een hoge doorvoer waarvoor duplicaatdetectie is vereist, moet u het venster zo klein mogelijk houden.

Volgende stappen

U kunt detectie van dubbele berichten inschakelen Azure Portal, PowerShell, CLI, Resource Manager sjabloon, .NET, Java, Python en JavaScript. Zie Detectie van dubbele berichten inschakelen voor meer informatie.

In scenario's waarin clientcode een bericht niet opnieuw kan verzenden met dezelfde MessageId als voorheen, is het belangrijk om berichten te ontwerpen die veilig opnieuw kunnen worden verwerkt. In dit blogbericht over idemence worden verschillende technieken beschreven om dat te doen.

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

Zoek voorbeelden voor de oudere .NET- en Java-clientbibliotheken hieronder: