J'ai créé une file d'attente non-FIFO de base et n'y ai ajouté qu'un seul message. Je récupère le message en utilisant le code suivant:SQS renvoie plus de messages que la taille de la file d'attente
ReceiveMessageRequest request = new ReceiveMessageRequest();
request.setQueueUrl(queueUrl);
request.setMaxNumberOfMessages(10);
request.withMessageAttributeNames("All");
ReceiveMessageResult result = sqsClient.receiveMessage(request);
List<Message> messages = result.getMessages();
messages.size() donne 3
Ils ont:
- même MessageId
- corps même et les attributs
- même MD5OfBody
- Différente ReceiptHandle
Modification MaxNumberOfMessages
de 10 à 1 l'a fixé, mais je veux recevoir par lot de 10 à l'avenir. Est-ce que quelqu'un peut expliquer pourquoi il récupère plus de messages qu'il ne le devrait?
Ci-dessous est ma configuration de file d'attente:
Default visibility timeout = 0
message retention = 4 days
max message size = 256kb
delivery delay = 0
receive message wait time = 0
no redrive policy
Ni 1 ni 0 ne sont susceptibles d'être une valeur appropriée pour le délai de visibilité par défaut. C'est presque certainement beaucoup trop court. Le délai d'expiration de la visibilité est la durée pendant laquelle SQS attend que vous supprimiez un message avant de supposer que vous avez planté ou rencontré un bogue, et redistribue le message, peut-être à vous ou à un autre consommateur de la même file d'attente. que vous avez échoué et en quelque sorte perdu le message et aurez besoin de le recevoir (et le traiter) à nouveau. –
@ Michael-sqlbot merci! CA aide –