Altera o tempo limite de visibilidade de uma mensagem consumida e controla por quanto tempo ela permanece invisível para outros consumidores antes de ficar disponível para nova entrega.
Como funciona
Quando um consumidor recebe uma mensagem de uma fila, ela se torna invisível para outros consumidores durante um período chamado tempo limite de visibilidade. Nesse intervalo, o consumidor processa e exclui a mensagem. Se o processamento demorar mais do que o esperado, chame ChangeMessageVisibility para estender o tempo limite e evitar que outro consumidor receba a mesma mensagem.
O novo tempo limite de visibilidade começa a contar no momento da chamada ChangeMessageVisibility, e não quando a mensagem foi recebida originalmente.
Exemplo: Uma fila tem tempo limite de visibilidade de 60 segundos. Um consumidor recebe uma mensagem e inicia o processamento. Após 15 segundos, o processamento ainda está em andamento. O consumidor chama ChangeMessageVisibility com VisibilityTimeout definido como 30. A mensagem permanece invisível por mais 30 segundos a partir dessa chamada. Ela se torna visível novamente 45 segundos após o recebimento inicial (15 + 30), e não após 90 segundos (60 + 30).
Autorização
Por padrão, apenas contas Alibaba Cloud podem chamar esta operação. Usuários do Resource Access Management (RAM) precisam receber as permissões necessárias antecipadamente. Para mais detalhes, consulte Políticas de permissão e exemplos.
|
Item |
Valor |
|
API |
ChangeMessageVisibility |
|
Action |
mns:ChangeMessageVisibility |
|
Resource |
acs:mns:$region:$accountid:/queues/$queueName/messages |
Requisição
Linha de requisição
PUT /queues/$queueName/messages?receiptHandle=<receiptHandle>&visibilityTimeout=<visibilitytimeout> HTTP/1.1
Parâmetros de URI
|
Parâmetro |
Tipo |
Obrigatório |
Exemplo |
Descrição |
|
ReceiptHandle |
String |
Sim |
MbZj6wDWli+QEauMZc8ZRv37sIW2iJKq3M9Mx/KSbkJ0 |
Handle de recibo retornado na última vez em que a mensagem foi consumida. Para mais detalhes, consulte ReceiveMessage. |
|
VisibilityTimeout |
Integer |
Sim |
50 |
Novo tempo limite de visibilidade em segundos. Valores válidos: 1 a 43200 (1 segundo a 12 horas). |
Cabeçalhos da requisição
Esta operação não usa cabeçalhos de requisição específicos. Apenas os cabeçalhos comuns são utilizados.
Corpo da requisição
Nenhum.
Resposta
Código de status
HTTP/1.1 200 OK
Cabeçalhos da resposta
Esta operação não retorna cabeçalhos de resposta específicos. Apenas os cabeçalhos comuns são retornados.
Corpo da resposta
O corpo da resposta está no formato XML:
|
Parâmetro |
Tipo |
Exemplo |
Descrição |
|
ReceiptHandle |
String |
TbZj6wDWli+9CEauMZc8ZRv37sIW2iJKq3M9Mx/TS1 |
Novo handle de recibo, válido até |
|
NextVisibleTime |
Long |
1250700979298000 |
Momento em que a mensagem se torna visível novamente, representado como timestamp UNIX em milissegundos desde 1º de janeiro de 1970, 00:00:00 UTC. |
Exemplos
Exemplo de requisição
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****
Exemplo de resposta
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>
Códigos de erro
|
Código de erro |
Mensagem de erro |
Código de status HTTP |
Descrição |
|
InvalidArgument |
The value of Element must be between Low and High seconds/bytes. |
400 |
O valor do parâmetro está fora do intervalo permitido. Especifique um valor dentro do intervalo válido. |
|
ReceiptHandleError |
The receipt handle you provided is not valid. |
400 |
O handle de recibo é inválido. Obtenha um handle válido chamando ReceiveMessage. |
|
QueueNotExist |
The queue name you provided does not exist. |
404 |
A fila especificada não existe. Verifique o nome da fila ou crie-a antes de continuar. |
|
MessageNotExist |
The receipt handle you provided has expired. |
404 |
A mensagem tornou-se visível novamente antes da conclusão do processamento e o handle de recibo expirou. Consuma as mensagens antes que o tempo limite de visibilidade expire ou estenda esse prazo chamando |
Operações relacionadas
As operações abaixo são frequentemente utilizadas em conjunto no fluxo de processamento de mensagens:
ReceiveMessage — Receba uma mensagem e obtenha seu handle de recibo.
ChangeMessageVisibility — Estenda o tempo limite de visibilidade caso o processamento demore mais do que o previsto.
DeleteMessage — Exclua a mensagem após a conclusão do processamento.