Modifie le délai de visibilité d'un message consommé, en contrôlant la durée pendant laquelle il reste invisible pour les autres consommateurs avant de devenir à nouveau disponible pour une redistribution.
Fonctionnement
Lorsqu'un consommateur reçoit un message d'une file d'attente, ce message devient invisible pour les autres consommateurs pendant une durée appelée délai de visibilité. Durant cette période, le consommateur traite et supprime le message. Si le traitement prend plus de temps que prévu, appelez ChangeMessageVisibility pour prolonger le délai et empêcher un autre consommateur de recevoir le même message.
Le nouveau délai de visibilité commence au moment de l'appel ChangeMessageVisibility, et non pas lorsque le message a été reçu initialement.
Exemple : Une file d'attente possède un délai de visibilité de 60 secondes. Un consommateur reçoit un message et commence son traitement. Au bout de 15 secondes, le traitement est toujours en cours ; le consommateur appelle donc ChangeMessageVisibility avec VisibilityTimeout défini sur 30. Le message reste invisible pendant 30 secondes supplémentaires à partir de cet appel : il redevient visible 45 secondes après sa réception initiale (15 + 30), et non pas 90 secondes (60 + 30).
Autorisation
Par défaut, seuls les comptes Alibaba Cloud peuvent appeler cette opération. Les utilisateurs RAM doivent préalablement se voir attribuer les autorisations requises. Pour plus d'informations, consultez Politiques et exemples d'autorisation.
| Élément | Valeur |
|---|---|
| API | ChangeMessageVisibility |
| Action | mns:ChangeMessageVisibility |
| Resource | acs:mns:$region:$accountid:/queues/$queueName/messages |
Requête
Ligne de requête
PUT /queues/$queueName/messages?receiptHandle=<receiptHandle>&visibilityTimeout=<visibilitytimeout> HTTP/1.1
Paramètres URI
| Paramètre | Type | Obligatoire | Exemple | Description |
|---|---|---|---|---|
| ReceiptHandle | String | Oui | MbZj6wDWli+QEauMZc8ZRv37sIW2iJKq3M9Mx/KSbkJ0 | Le descripteur de réception renvoyé lors de la dernière consommation du message. Pour plus d'informations, consultez ReceiveMessage. |
| VisibilityTimeout | Integer | Oui | 50 | Le nouveau délai de visibilité en secondes. Valeurs valides : 1 à 43200 (de 1 seconde à 12 heures). |
En-têtes de requête
Aucun en-tête de requête spécifique à l'opération. Seuls les en-têtes de requête communs sont utilisés.
Corps de la requête
Aucun.
Réponse
Code d'état
HTTP/1.1 200 OK
En-têtes de réponse
Aucun en-tête de réponse spécifique à l'opération. Seuls les en-têtes de réponse communs sont renvoyés.
Corps de la réponse
Le corps de la réponse est au format XML :
| Paramètre | Type | Exemple | Description |
|---|---|---|---|
| ReceiptHandle | String | TbZj6wDWli+9CEauMZc8ZRv37sIW2iJKq3M9Mx/TS1 | Un nouveau descripteur de réception, valide jusqu'à NextVisibleTime. Utilisez ce descripteur pour les opérations de suppression ou de modification ultérieures sur le message. Le descripteur de réception précédent n'est plus valide. |
| NextVisibleTime | Long | 1250700979298000 | L'instant auquel le message redevient visible, sous forme d'horodatage UNIX en millisecondes depuis le 1er janvier 1970, 00:00:00 UTC. |
Exemples
Exemple de requête
PUT /queues/$queueName/messages
?receiptHandle=MbZj6wDWli+QEauMZc8ZRv37sIW2iJKq3M9Mx/KSbkJ0&visibilityTimeout=50 HTTP/1.1
Host: $AccountId.mns.cn-hangzhou.aliyuncs.com
Date: Wed, 28 May 2012 22:32:00 GMT
x-mns-version: 2015-06-06
Authorization: MNS 15B4D3461F177624206A:xQE0diMbLRepdf3YB+FIEXA****
Exemple de réponse
HTTP/1.1 200 OK
x-mns-request-id:512B2A634403E52B1956****
x-mns-version: 2015-06-06
<?xml version="1.0" encoding="UTF-8"?>
<ChangeVisibility xmlns="http://mns.aliyuncs.com/doc/v1/">
<ReceiptHandle>TbZj6wDWli+9CEauMZc8ZRv37sIW2iJKq3M9Mx/TS1</ReceiptHandle>
<NextVisibleTime>1250700979298000</NextVisibleTime>
</ChangeVisibility>
Codes d'erreur
| Code d'erreur | Message d'erreur | Code d'état HTTP | Description |
|---|---|---|---|
| InvalidArgument | The value of Element must be between Low and High seconds/bytes. | 400 | La valeur du paramètre est hors plage. Spécifiez une valeur dans la plage valide. |
| ReceiptHandleError | The receipt handle you provided is not valid. | 400 | Le descripteur de réception est invalide. Obtenez un descripteur de réception valide en appelant ReceiveMessage. |
| QueueNotExist | The queue name you provided does not exist. | 404 | La file d'attente spécifiée n'existe pas. Vérifiez le nom de la file d'attente ou créez-la au préalable. |
| MessageNotExist | The receipt handle you provided has expired. | 404 | Le message est redevenu visible avant la fin du traitement et le descripteur de réception a expiré. Consommez les messages avant l'expiration du délai de visibilité, ou prolongez ce délai en appelant ChangeMessageVisibility plus tôt. |
Opérations connexes
Les opérations suivantes sont couramment utilisées conjointement dans un flux de traitement de messages :
ReceiveMessage — Recevez un message et obtenez son descripteur de réception.
ChangeMessageVisibility — Prolongez le délai de visibilité si le traitement prend plus de temps que prévu.
DeleteMessage — Supprimez le message une fois le traitement terminé.