Recebe até 16 mensagens de uma fila em uma única chamada.
Após o recebimento, as mensagens entram no estado Inactive durante o período definido pelo parâmetro VisibilityTimeout da fila. Exclua as mensagens dentro dessa janela após processá-las. Caso contrário, elas retornam ao estado Active e ficam disponíveis para nova entrega.
Autorização
Por padrão, apenas contas Alibaba Cloud podem chamar esta operação. Conceda as permissões necessárias aos usuários RAM antes que eles executem esta operação. Para mais detalhes, consulte Políticas de permissão e exemplos.
|
Propriedade |
Valor |
|
API |
BatchReceiveMessage |
|
Action |
mns:BatchReceiveMessage |
|
Resource |
acs:mns:$region:$accountid:/queues/$queueName/messages |
Funcionamento
Envie uma requisição
GETcom o parâmetronumOfMessagespara receber mensagens de uma fila.As mensagens retornadas entram imediatamente no estado Inactive e ficam ocultas para outros consumidores.
Processe cada mensagem e chame DeleteMessage com o
ReceiptHandleda mensagem antes doNextVisibleTime.Se você não excluir a mensagem dentro do período de
VisibilityTimeout, ela retorna ao estado Active e pode ser consumida novamente.
O parâmetro VisibilityTimeout é configurado no nível da fila por meio de CreateQueue.
Requisição
Linha de requisição
GET /queues/$queueName/messages?numOfMessages=16&waitseconds=10 HTTP/1.1
Parâmetros URI
|
Parâmetro |
Tipo |
Obrigatório |
Exemplo |
Descrição |
|
numOfMessages |
Integer |
Sim |
10 |
Número máximo de mensagens a receber. |
|
waitseconds |
Integer |
Não |
0 |
Tempo de espera para long polling, em segundos. Se nenhuma mensagem estiver disponível, a requisição permanece aberta até a chegada de uma mensagem ou o fim do tempo de espera. Se omitido, assume o valor padrão de |
Comportamento de long polling
Quando waitseconds é definido (ou quando se aplica o valor padrão de PollingWaitSeconds da fila), a requisição permanece aberta até a chegada de uma mensagem ou o fim do tempo de espera. Mensagens escritas na fila durante esse período são entregues imediatamente. Para entender os dois modos de polling, consulte Short polling e long polling.
O SMQ limita requisições simultâneas de long polling com base na quantidade de requisições, duração da espera e endereços IP do cliente. Quando esse limite é excedido, o SMQ retorna 404 MessageNotExist imediatamente, em vez de manter a requisição aberta. Para evitar cobranças desnecessárias, reduza as requisições simultâneas de long polling e utilize um tempo de espera adequado. Para aumentar o limite, envie um ticket.
Cabeçalhos da requisição
Nenhum cabeçalho específico da operação.
Corpo da requisição
Nenhum.
Resposta
Código de status HTTP
HTTP/1.1 200 OK
Cabeçalhos da resposta
Nenhum cabeçalho específico da operação.
Corpo da resposta
O corpo da resposta é XML. Cada elemento <Message> dentro de <Messages> contém os seguintes campos:
|
Parâmetro |
Tipo |
Exemplo |
Descrição |
|
MessageId |
String |
5F290C926D472878-2-14D9529A8FA-20000\\\\ |
Identificador exclusivo da mensagem na fila. |
|
ReceiptHandle |
String |
1-ODU4OTkzNDU5My0xNDMyNzI3ODI3LTItOA== |
Handle para excluir ou modificar a mensagem enquanto estiver no estado Inactive. Válido até |
|
MessageBody |
String |
This is test message 1. |
Conteúdo da mensagem. |
|
MessageBodyMD5 |
String |
C5DD56A39F5F7BB8B3337C6D11B6\\\\ |
Hash MD5 do corpo da mensagem. |
|
EnqueueTime |
Long |
1250700979248 |
Momento em que a mensagem foi enviada para a fila. Timestamp UNIX em milissegundos. |
|
NextVisibleTime |
Long |
1250700799348 |
Momento em que a mensagem se torna visível novamente. Timestamp UNIX em milissegundos. |
|
FirstDequeueTime |
Long |
1250700779318 |
Momento em que a mensagem foi consumida pela primeira vez. Timestamp UNIX em milissegundos. |
|
DequeueCount |
Integer |
1 |
Número total de vezes que a mensagem foi consumida. |
Exemplos
Exemplo de requisição
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****
Exemplo de resposta
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 erro
|
Código de erro |
Mensagem de erro |
Código de status HTTP |
Descrição |
|
QueueNotExist |
The queue name you provided is not exist. |
404 |
A fila especificada não existe. Crie a fila primeiro. |
|
MessageNotExist |
Message not exist. |
404 |
Nenhuma mensagem visível na fila. Isso também ocorre quando o limite de long polling simultâneo é excedido. |