Todos os produtos
Search
Central de documentação

Simple Message Queue (formerly MNS):Duração adaptativa de processamento de mensagens

Última atualização: Sep 17, 2026

Este tópico explica os conceitos, cenários e a solução para a duração adaptativa de processamento de mensagens durante o consumo.

Conceitos básicos

  • Visível: A mensagem está disponível na fila. Qualquer consumidor pode recebê-la e processá-la. Um consumidor é um service ou aplicativo que recebe e processa mensagens.

  • Invisível: Após um único consumidor receber uma mensagem, ela se torna invisível e não pode ser recebida por outros consumidores. Isso impede que outros consumidores processem a mesma mensagem.

  • Período de tempo limite de visibilidade: O intervalo entre o momento em que um consumidor recebe uma mensagem (tornando-a invisível para outros consumidores) e o momento em que ela pode ser recebida novamente por outros consumidores (tornando-se visível).

Quando um único consumidor recebe uma mensagem, ela se torna invisível e não pode ser recebida por outros consumidores. Esse status invisível depende do período de tempo limite de visibilidade, que impede que outros consumidores processem a mesma mensagem.

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

Cenários

O Simple Message Queue (formerly MNS) define um período de tempo limite de visibilidade padrão para cada mensagem. A contagem regressiva começa assim que um consumidor recebe uma mensagem. Se o consumidor não conseguir processar a mensagem dentro do período de tempo limite de visibilidade, outro consumidor poderá recebê-la e processá-la. Esse tempo limite é vantajoso porque as mensagens devem ser explicitamente excluídas após o processamento. Caso ocorra um evento anormal, como a falha do processo do consumidor, a mensagem ainda poderá ser processada por outro consumidor.

Alguns usuários definem um longo período de tempo limite de visibilidade padrão para uma fila a fim de garantir que a mensagem não seja liberada antes que o consumidor termine de processá-la. Por exemplo, suponha que o período de tempo limite de visibilidade de uma fila esteja definido como 6 horas. Um consumidor recebe e processa a mensagem M1. Se o processo falhar ou a máquina reiniciar, a mensagem M1 não poderá ser recebida e processada por outro consumidor por pelo menos 6 horas. Escrever código personalizado para lidar com essas falhas aumenta a complexidade do programa.

Em cenários que exigem alta performance em tempo real e respostas rápidas para cada mensagem, o consumo de mensagens deve atender aos seguintes objetivos:

  • O período de tempo limite de visibilidade da fila é curto. Se um processo falhar, outro consumidor poderá receber e processar a mensagem pendente após o término desse curto período de tempo limite de visibilidade.

  • As mensagens não devem atingir o tempo limite durante o processamento. Por exemplo, se um consumidor levar mais de 5 minutos para processar uma mensagem, ela não deverá expirar durante esse processo.

Solução

O SDK C# fornecido pelo Simple Message Queue (formerly MNS) consegue lidar com esse cenário. A solução consiste em verificar periodicamente se uma operação ChangeVisibility é necessária para a mensagem enquanto o consumidor a processa. Após concluir o processamento, o consumidor ainda precisa excluir ativamente a mensagem.

Para obter o link de download do SDK C#, consulte C++ SDK. Se você encontrar problemas com a demonstração, envie um ticket.

Os pontos a seguir se aplicam ao programa:

  • Antes de executar o programa, especifique o accessId, a accessKey e o EndPoint.

  • Descrições das variáveis:

    Variável

    Descrição

    MessageMinimalLife

    A duração mínima de vida útil que uma mensagem deve ter ao ser registrada. Por exemplo, se restarem apenas 0,1 segundos do período de tempo limite de uma mensagem quando ela for registrada, não haverá tempo suficiente para estender sua vida útil com ChangeVisibility. Portanto, MessageMinimalLife garante que a mensagem sobreviva por tempo suficiente para que ChangeVisibility seja chamado. Defina esse valor conforme necessário com base na carga de trabalho do seu negócio.

    TimerInterval

    O intervalo do timer interno no Manager. Garanta que o timer inicie antes que a vida útil restante da mensagem atinja MessageMinimalLife. É possível definir um intervalo curto, mas isso resulta em verificações mais frequentes.

    QueueMessageVisibilityTimeout

    O período de tempo limite de visibilidade padrão para uma mensagem. Esta é uma propriedade da fila. Cada vez que ChangeVisibility é chamado, o período de tempo limite de visibilidade da mensagem é redefinido para QueueMessageVisibilityTimeout. Portanto, seu valor deve ser maior que TimerInterval + MessageMinimalLife para garantir que a mensagem não atinja o tempo limite.

    MessageTimeout

    O período de tempo limite para uma mensagem dentro do Manager. Por exemplo, se um consumidor travar e uma mensagem não for processada após 5 horas (supondo que 5 horas seja muito mais longo que o tempo normal de processamento), o Manager para de chamar ChangeVisibility para essa mensagem e permite que o tempo de visibilidade dela expire.

  • Descrição do fluxo:

    • Após receber uma mensagem, o consumidor primeiro a registra, depois a processa e, por fim, chama o método deleteMessage do Manager.

    • Quando uma mensagem é registrada pela primeira vez, o Manager usa o ThreadPool para agendar um ChangeVisibilityTask a fim de verificar se uma operação ChangeVisibility é necessária. O Manager também adiciona a mensagem à sua lista interna de mensagens.

    • O timer interno do Manager usa periodicamente Parallel para iniciar um ChangeVisibilityTask que verifica todas as mensagens na lista.

    • As operações específicas relacionadas a Manager.ChangeMessageVisibility (ChangeVisibilityTask) são mostradas no fluxograma.

      O fluxograma é o seguinte:

      image

Instruções

  1. Leia o conteúdo em inglês para entender O QUE precisa ser comunicado

  2. Escreva o português brasileiro DO ZERO — esqueça a estrutura das frases em inglês

  3. Preserve toda a formatação markdown, blocos de código, links e imagens exatamente como estão

  4. Copie os placeholders xref ({XREF_N}) literalmente, NÃO os traduza ou modifique

  5. Aplique todas as regras específicas do idioma rigorosamente

  6. Aplique as regras de stopwords com tolerância zero

  7. Use o modo imperativo em etapas numeradas e listas de procedimentos

  8. Garanta a consistência terminológica — o mesmo termo deve ter a mesma tradução em todo o documento

  9. Varie os inícios das frases em listas e tabelas — nenhum início deve ser repetido mais de 3 vezes

  10. Retorne APENAS o documento markdown em português brasileiro, sem explicações