Récupérez des messages depuis un topic ApsaraMQ for RocketMQ via HTTP. Le broker renvoie jusqu'à 16 messages par requête au format XML. Chaque message inclut le corps du message, un condensé MD5, un handle de réception pour l'accusé de réception, des horodatages et des attributs de message.
Requête
GET /topics/<TopicName>/messages?ns=<instance-id>&consumer=<group-id>&tag=<tag>&numOfMessages=<count>&waitseconds=<seconds> HTTP/1.1
La longueur totale de la ligne de requête ne doit pas dépasser 1 024 caractères.
Paramètres
| Paramètre | Obligatoire | Description | ||||
|---|---|---|---|---|---|---|
| TopicName | Oui | Nom du topic à partir duquel consommer les messages. | ||||
| ns | Conditionnel | ID d'instance. Requis pour les instances disposant de namespaces. Consultez la page Instance Details dans la console ApsaraMQ for RocketMQ pour déterminer si votre instance possède un namespace. Pour plus d'informations, consultez la rubrique Utiliser des instances. | ||||
| consumer | Oui | ID du groupe de consommateurs. | ||||
| tag | Non | Tag de message pour le filtrage. Omettez ce paramètre pour récupérer tous les messages. Séparez plusieurs tags par des barres verticales doubles (` |
`). Exemple : |
TagB`. |
||
| numOfMessages | Oui | Nombre maximal de messages à renvoyer. Valeurs valides : 1 à 16. | ||||
| waitseconds | Non | Délai d'expiration du long polling en secondes. Valeurs valides : 0 à 30. Définissez sur 0 ou omettez le paramètre pour utiliser le short polling. Consultez la section Long polling vs. short polling. |
Corps de la requête
Aucun.
Types d'instances
ApsaraMQ for RocketMQ propose deux types d'instances :
Default instance -- Aucun namespace. Les noms de ressources doivent être uniques globalement.
New instance -- Dispose d'un namespace. Les noms de ressources doivent uniquement être uniques au sein de l'instance.
Long polling vs. short polling
Le paramètre waitseconds contrôle la manière dont le broker gère les requêtes lorsqu'aucun message n'est disponible.
| Mode | Comportement |
|---|---|
Long polling (waitseconds > 0) |
Le broker maintient la requête ouverte jusqu'à l'arrivée d'un message ou jusqu'à l'expiration du délai. |
Short polling (waitseconds = 0 ou omis) |
Le broker répond immédiatement, même si aucun message n'est disponible. Le client doit interroger le serveur de manière répétée. |
Le short polling génère un volume élevé de réponses vides lorsque aucun message n'est produit, et chaque réponse entraîne des frais d'appel API. Utilisez le long polling avec une valeur waitseconds plus élevée pour réduire les coûts.
Réponse
Succès (HTTP 200)
Le broker renvoie un ou plusieurs éléments <Message> en XML. Chaque élément contient les champs suivants :
| Paramètre | Type | Description |
|---|---|---|
| MessageId | String | ID unique du message. |
| MessageBodyMD5 | String | Condensé MD5 du corps du message. |
| MessageBody | String | Contenu du corps du message. |
| ReceiptHandle | String | Handle permettant d'accuser réception du message. Transmettez ce handle à l'opération d'accusé de réception (suppression) pour confirmer la consommation. À usage unique -- expire à NextConsumeTime. Un nouveau handle est émis à chaque nouvelle tentative. |
| PublishTime | String | Heure de publication du message. Horodatage UNIX en millisecondes. |
| FirstConsumeTime | String | Heure de la première consommation du message. Horodatage UNIX en millisecondes. |
| NextConsumeTime | String | Heure à laquelle le message devient disponible pour une nouvelle tentative. Horodatage UNIX en millisecondes. |
| ConsumedTimes | String | Nombre de tentatives de consommation. |
| MessageTag | String | Tag du message. |
| Properties | String | Attributs de message sérialisés au format clé-valeur. Consultez la section Format des propriétés de message. |
Via HTTP, les messages non ordonnés font l'objet d'une nouvelle tentative toutes les 5 minutes, tandis que les messages ordonnés sont réessayés toutes les minutes. Chaque message peut faire l'objet d'un maximum de 288 nouvelles tentatives.
Format des propriétés de message
Le champ Properties utilise le format key1:value1|key2:value2|key3:value3.
| Clé | Type | Description |
|---|---|---|
| KEYS | String | Clé du message. |
| __STARTDELIVERTIME | Long | Heure de livraison planifiée pour un message planifié. Horodatage UNIX en millisecondes. |
| __TransCheckT | Long | Délai avant la première vérification de l'état de la transaction pour un message transactionnel, en secondes. Valeurs valides : 10 à 300. |
Aucun message disponible (HTTP 404)
Si aucun message n'est disponible, le broker renvoie un code HTTP 404 avec le code d'erreur MessageNotExist. Il s'agit d'un comportement attendu, et non d'une erreur.
| Paramètre | Type | Description |
|---|---|---|
| Code | String | Code d'erreur. MessageNotExist indique qu'aucun message n'est disponible. |
| Message | String | Message d'erreur. |
| RequestId | String | ID de la requête. |
| HostId | String | Hôte ayant envoyé la requête. |
Exemples de réponses
Messages disponibles
<?xml version="1.0" ?>
<Messages xmlns="http://mq.aliyuncs.com/doc/v1">
<Message>
<MessageId>1E057D5E6EAD42A579937046FE17****</MessageId>
<MessageBodyMD5>0CC175B9C0F1B6A831C399E26977****</MessageBodyMD5>
<MessageBody>a</MessageBody>
<ReceiptHandle>1E057D5E6EAD42A579937046FE17****-MTI5N****</ReceiptHandle>
<PublishTime>1571742900759</PublishTime>
<FirstConsumeTime>1571742902463</FirstConsumeTime>
<NextConsumeTime>1571743202463</NextConsumeTime>
<ConsumedTimes>1</ConsumedTimes>
<MessageTag>Tag</MessageTag>
<Properties>KEYS:MessageKey|__BORNHOST:30.5.**.**|</Properties>
</Message>
<Message>
<MessageId>1E057D5E6EAD42A579937046FE17****</MessageId>
<MessageBodyMD5>0CC175B9C0F1B6A831C399E26977****</MessageBodyMD5>
<MessageBody>a</MessageBody>
<ReceiptHandle>1E057D5E6EAD42A579937046FE17****-MTI5N****</ReceiptHandle>
<PublishTime>1571742900759</PublishTime>
<FirstConsumeTime>1571742902463</FirstConsumeTime>
<NextConsumeTime>1571743202463</NextConsumeTime>
<ConsumedTimes>1</ConsumedTimes>
<MessageTag>Tag</MessageTag>
<Properties>KEYS:MessageKey|__BORNHOST:30.5.**.**|</Properties>
</Message>
</Messages>
Aucun message disponible
<?xml version="1.0" ?>
<Error xmlns="http://mq.aliyuncs.com/doc/v1">
<Code>MessageNotExist</Code>
<Message>Message not exist.</Message>
<RequestId>5DAEE3FF463541AD6E0322EB</RequestId>
<HostId>http://123.mqrest.cn-hangzhou.aliyuncs.com</HostId>
</Error>