Recibe hasta 16 mensajes de una cola en una sola llamada.
Una vez recibidos, los mensajes pasan al estado Inactive durante el tiempo definido por el parámetro VisibilityTimeout de la cola. Elimine los mensajes dentro de esta ventana después de procesarlos. De lo contrario, volverán al estado Active y estarán disponibles para su reenvío.
Autorización
De forma predeterminada, solo las cuentas de Alibaba Cloud pueden llamar a esta operación. Otorgue a los usuarios de RAM los permisos obligatorios antes de que ejecuten esta operación. Para más información, consulte Permission policies and examples.
|
Propiedad |
Valor |
|
API |
BatchReceiveMessage |
|
Acción |
mns:BatchReceiveMessage |
|
Recurso |
acs:mns:$region:$accountid:/queues/$queueName/messages |
Funcionamiento
Envíe una solicitud
GETcon el parámetronumOfMessagespara recibir mensajes de una cola.Los mensajes devueltos pasan inmediatamente al estado Inactive y quedan ocultos para otros consumidores.
Procese cada mensaje y llame a DeleteMessage con el
ReceiptHandledel mensaje antes de que se alcanceNextVisibleTime.Si no elimina un mensaje dentro del periodo
VisibilityTimeout, este vuelve al estado Active y puede consumirse de nuevo.
El valor de VisibilityTimeout se configura para cada cola mediante CreateQueue.
Solicitud
Línea de solicitud
GET /queues/$queueName/messages?numOfMessages=16&waitseconds=10 HTTP/1.1
Parámetros URI
|
Parámetro |
Tipo |
Obligatorio |
Ejemplo |
Descripción |
|
numOfMessages |
Integer |
Sí |
10 |
Número máximo de mensajes por recibir. |
|
waitseconds |
Integer |
No |
0 |
Tiempo de espera del sondeo largo (long polling), en segundos. Cuando no hay ningún mensaje disponible, la solicitud se mantiene abierta hasta que llega un mensaje o transcurre el tiempo de espera. Si se omite, toma el valor predeterminado de |
Comportamiento del sondeo largo
Cuando se establece waitseconds (o se aplica el valor predeterminado PollingWaitSeconds de la cola), la solicitud se mantiene abierta hasta que llega un mensaje o transcurre el tiempo de espera. Los mensajes escritos en la cola durante este periodo se entregan de inmediato. Para conocer el contexto de los dos modos de sondeo, consulte Short polling and long polling.
SMQ limita las solicitudes concurrentes de sondeo largo según la cantidad de solicitudes, la duración de la espera y las direcciones IP de los clientes. Al superar este límite, SMQ devuelve 404 MessageNotExist de inmediato en lugar de mantener la solicitud abierta. Para evitar cargos innecesarios, reduzca las solicitudes concurrentes de sondeo largo y utilice una duración de espera adecuada. Para aumentar el límite, envíe un ticket.
Encabezados de solicitud
No existen encabezados específicos para esta operación.
Cuerpo de la solicitud
Ninguno.
Respuesta
Código de estado HTTP
HTTP/1.1 200 OK
Encabezados de respuesta
No existen encabezados específicos para esta operación.
Cuerpo de la respuesta
El cuerpo de la respuesta está en formato XML. Cada elemento <Message> dentro de <Messages> contiene los siguientes campos:
|
Parámetro |
Tipo |
Ejemplo |
Descripción |
|
MessageId |
String |
5F290C926D472878-2-14D9529A8FA-20000\\\\ |
Identificador único del mensaje dentro de la cola. |
|
ReceiptHandle |
String |
1-ODU4OTkzNDU5My0xNDMyNzI3ODI3LTItOA== |
Identificador para eliminar o modificar el mensaje mientras se encuentra en estado Inactive. Es válido hasta |
|
MessageBody |
String |
This is test message 1. |
Contenido del mensaje. |
|
MessageBodyMD5 |
String |
C5DD56A39F5F7BB8B3337C6D11B6\\\\ |
Hash MD5 del cuerpo del mensaje. |
|
EnqueueTime |
Long |
1250700979248 |
Hora en la que el mensaje se envió a la cola. Marca de tiempo UNIX en milisegundos. |
|
NextVisibleTime |
Long |
1250700799348 |
Hora en la que el mensaje vuelve a estar visible. Marca de tiempo UNIX en milisegundos. |
|
FirstDequeueTime |
Long |
1250700779318 |
Hora en la que el mensaje se consumió por primera vez. Marca de tiempo UNIX en milisegundos. |
|
DequeueCount |
Integer |
1 |
Número total de veces que se ha consumido el mensaje. |
Ejemplos
Solicitud de ejemplo
GET /queues/$queueName/messages?numOfMessages=16 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****
Respuesta de ejemplo
HTTP/1.1 200 OK
Content-Type: text/xml;charset=utf-8
Content-Length: 500
x-mns-request-id: 512B2A634403E52B1956****
x-mns-version: 2015-06-06
<?xml version="1.0" encoding="UTF-8"?>
<Messages xmlns="http://mns.aliyuncs.com/doc/v1/">
<Message>
<MessageId>5F290C926D472878-2-14D9529A8FA-20000****</MessageId>
<ReceiptHandle>1-ODU4OTkzNDU5My0xNDMyNzI3ODI3LTItOA==</ReceiptHandle>
<MessageBodyMD5>C5DD56A39F5F7BB8B3337C6D11B6****</MessageBodyMD5>
<MessageBody>This is test message 1.</MessageBody>
<EnqueueTime>1250700979248</EnqueueTime>
<NextVisibleTime>1250700799348</NextVisibleTime>
<FirstDequeueTime>1250700779318</FirstDequeueTime>
<DequeueCount>1</DequeueCount>
<Priority>8</Priority>
</Message>
<Message>
<ReceiptHandle>1-ODU4OTkzNDU5My0xNDMyNzI3MjQwLTEtOA==</ReceiptHandle>
<MessageBodyMD5>C5DD56A39F5F7BB8B3337C6D11B6****</MessageBodyMD5>
<MessageBody>This is test message 2.</MessageBody>
<EnqueueTime>1250700979252</EnqueueTime>
<NextVisibleTime>1250700799350</NextVisibleTime>
<FirstDequeueTime>1250700779330</FirstDequeueTime>
<DequeueCount>1</DequeueCount>
<Priority>8</Priority>
</Message>
</Messages>
Códigos de error
|
Código de error |
Mensaje de error |
Código de estado HTTP |
Descripción |
|
QueueNotExist |
The queue name you provided is not exist. |
404 |
La cola especificada no existe. Cree la cola primero. |
|
MessageNotExist |
Message not exist. |
404 |
No hay mensajes visibles en la cola. Este error también ocurre cuando se supera el límite de sondeo largo concurrente. |