2017-10-09 5 views
0

je suis passé à une file d'attente FIFO et je reçu ce message d'erreur lorsque j'ai essayé de supprimer un message de la file d'attenteSuppression message de la file d'attente FIFO SQS: La poignée de réception a expiré

Value {VALUE} for parameter ReceiptHandle is invalid. Reason: The receipt handle has expired. 

Il semble que l'erreur se produit parce que j'ai essayé de supprimer le message après que visibility timeout a expiré. J'ai changé le délai de visibilité par défaut 0 au maximum, 12 heures, cela a résolu partiellement le problème. Parfois il peut arriver qu'un message reste dans ma file d'attente pendant plus de 12 heures avant que je puisse l'exécuter et que je l'efface, donc j'obtiendrai à nouveau l'erreur. Existe-t-il une solution pour augmenter le délai de visibilité de plus de 12 heures ou pour contourner cette erreur d'une autre manière?

Répondre

1

TLDR: Vous souhaitez examiner l'API ChangeMessageVisibility.

Détails

La raison de délai d'attente de visibilité est de vous assurer que le processus de traitement du message n'a pas terminé de façon inattendue, et laisser le message à traiter par un travailleur différent.

Si votre processus doit prendre plus de temps que le délai de visibilité configuré, il doit essentiellement envoyer un signal à SQS indiquant "Je suis toujours en vie et je travaille sur ce message". C'est pour cela que ChangeMessageVisibility est pour. Si vous avez une grande variabilité dans le temps nécessaire pour consommer et traiter un message, je suggère de définir un délai d'expiration de visibilité par défaut faible et de demander à vos employés d'émettre un «signal de présence» (indiquant ChangeMessageVisibility) pour indiquer qu'ils sont toujours en vie et travailler sur le message. De cette façon, vous pouvez toujours récupérer assez rapidement lorsqu'un travailleur échoue légitimement.

Notez qu'il existe également ChangeMessageVisibilityBatch pour ce faire sur des lots de messages.