Todos os produtos
Search
Central de documentação

Simple Message Queue (formerly MNS):Gerencie o tempo limite de visibilidade de uma mensagem

Última atualização: Jun 27, 2026

Este tópico descreve termos, cenários e soluções para gerenciar o tempo limite de visibilidade de mensagens durante o consumo.

Termos

  • Visível: a mensagem está disponível na fila. Qualquer consumidor pode recebê-la e processá-la. Consumidor é um serviço ou aplicativo que recebe e processa mensagens.

  • Invisível: um consumidor recebeu a mensagem. Outros consumidores não podem vê-la nem recebê-la até que o período de tempo limite de visibilidade expire.

Para obter mais informações sobre o período de tempo limite de visibilidade, consulte Período de tempo limite de visibilidade.

Cenário

O Simple Message Queue (SMQ, anteriormente MNS) fornece o parâmetro VisibilityTimeout para cada mensagem. Após um consumidor receber uma mensagem, o SMQ inicia a contagem do tempo limite de visibilidade. Se o consumidor não concluir o processamento dentro do período especificado, outros consumidores poderão receber e processar a mensagem. Caso você defina o parâmetro VisibilityTimeout e o consumidor falhe no processamento, a mensagem não será excluída e ficará disponível para outros consumidores.

Defina um valor alto para o parâmetro VisibilityTimeout a fim de garantir tempo suficiente para o processamento das mensagens. Suponha que o valor do parâmetro VisibilityTimeout de uma fila seja 6 horas. Um consumidor recebe a mensagem M1. Durante o processamento, ocorre uma falha ou o host reinicia. Nesse caso, outro consumidor só poderá receber ou processar a mensagem M1 após seis horas. Embora seja possível escrever código para reduzir esse tempo, essa abordagem aumenta a complexidade do processo.

Em cenários específicos, é necessário processar as mensagens imediatamente após o recebimento. Considere os seguintes requisitos:

  • O valor do parâmetro VisibilityTimeout é baixo, por exemplo, 5 minutos. Se ocorrer falha no consumidor, outros consumidores poderão receber e processar as mensagens pendentes dentro de cinco minutos.

  • Mantenha a conexão ativa enquanto o consumidor processa a mensagem, pois o processo pode levar mais de cinco minutos.

Solução

O Simple Message Queue (SMQ, anteriormente MNS) disponibiliza um código de exemplo em C# para resolver o problema descrito no cenário anterior. O fluxo funciona da seguinte forma: enquanto o consumidor processa a mensagem, o SMQ verifica periodicamente se é necessário chamar a operação ChangeVisibility. Após a conclusão do processamento, chame a operação deleteMessage para excluir a mensagem.

Para obter mais informações sobre como baixar o código de exemplo em C#, consulte Notas de versão do SDK for C++. Para suporte técnico sobre o uso da demonstração, abra um ticket.

Ao usar o código de exemplo, observe as seguintes informações:

  • Antes de executar o código, configure accessId, accessKey e EndPoint.

  • Variáveis:

    Variáveis

    Descrição

    MessageMinimalLife

    Tempo de vida mínimo necessário ao registrar uma mensagem. Por exemplo, se o tempo limite de uma mensagem expirar 0,1 segundos após o registro, o SMQ não terá tempo suficiente para chamar a operação ChangeVisibility e estender sua duração. Assim, o MessageMinimalLife garante que a mensagem não atinja o tempo limite antes que o SMQ possa chamar a operação ChangeVisibility para prolongar sua validade. Especifique o parâmetro MessageMinimalLife conforme suas necessidades de negócio.

    TimerInterval

    Intervalo utilizado pelo temporizador interno do gerenciador para controle de tempo. Garanta que o temporizador inicie antes do fim da vida útil especificada da mensagem. Defina um valor baixo para o parâmetro TimerInterval para verificar as mensagens em intervalos curtos.

    QueueMessageVisibilityTimeout

    Período de tempo limite padrão de uma mensagem na fila. Ao usar o código de exemplo para chamar a operação ChangeVisibility, o valor do parâmetro VisibilityTimeout será igual ao definido no parâmetro QueueMessageVisibilityTimeout. Portanto, o valor de QueueMessageVisibilityTimeout deve ser maior que a soma dos valores de TimerInterval e MessageMinmalLife. Caso contrário, a mensagem poderá atingir o tempo limite.

    MessageTimeout

    Período de tempo limite de uma mensagem no gerenciador. Por exemplo, se houver falha no consumidor, o gerenciador deixará de alterar a visibilidade da mensagem e ela atingirá o tempo limite.

  • Processo:

    • Após receber a mensagem, o consumidor a registra, processa e chama a operação Manager.deleteMessage para excluí-la.

    • Depois do registro, o gerenciador chama a operação ThreadPool.ChangeVisibilityTask para verificar a necessidade da operação ChangeVisibility e adiciona a mensagem à lista interna de mensagens.

    • O temporizador do gerenciador invoca periodicamente a operação Parallel.ChangeVisibilityTask para verificar todas as mensagens da lista.

    • A figura a seguir ilustra o gerenciamento do tempo limite de visibilidade das mensagens por meio da chamada à operação Manager.ChangeMessageVisibility (ChangeVisibilityTask).

      A figura abaixo detalha o procedimento de gerenciamento do tempo limite de visibilidade das mensagens:

      image