Todos os produtos
Search
Central de documentação

:Transferência de mensagens grandes

Última atualização: Jul 04, 2026

Este artigo descreve como usar o Simple Message Queue (formerly MNS) para transferir uma mensagem com tamanho superior a 64 KB sem dividi-la.

Informações básicas

O tamanho máximo de uma mensagem em uma fila do Simple Message Queue (formerly MNS) é de 64 KB. Esse limite atende às necessidades de troca de dados na maioria dos cenários com controle de fluxo. Nesses casos, mensagens maiores que 64 KB exigem divisão.

O MNS oferece uma solução para transmitir mensagens maiores que 64 KB sem fragmentação.

Solução

  1. Ao enviar uma mensagem maior que 64 KB para o Simple Message Queue (formerly MNS), o cliente produtor faz upload da mensagem no Object Storage Service (OSS).

  2. O cliente produtor envia as informações do objeto do OSS contendo a mensagem para o Simple Message Queue (formerly MNS).

  3. O cliente consumidor lê a mensagem da fila do Simple Message Queue (formerly MNS) e verifica se o conteúdo corresponde às informações de um objeto do OSS.

  4. Se o conteúdo for referente a um objeto do OSS, o cliente consumidor baixa esse objeto e retorna o conteúdo da mensagem à aplicação de camada superior.

A figura a seguir ilustra o processo de transferência de mensagens.

Process

Código de exemplo

O MNS disponibiliza um código de exemplo em Java para transferir mensagens grandes. Baixe o código de exemplo. A classe BigMessageSizeQueue encapsula todos os recursos necessários.

A classe BigMessageSizeQueue fornece os seguintes métodos públicos:

// Specify a constructor. cq is a common mnsqueue object. The ossClient and ossBucketName include the information of the OSS region and bucket that are used to transfer oversized messages.
public BigMessageSizeQueue(CloudQueue cq, OSSClient ossClient, String ossBucketName)
// Send a message.
public Message putMessage(Message message) 
// Receive the message.
public Message popMessage(int waitSeconds) 
// Delete the message.
public void deleteMessage(String receiptHandle) 
// Specify the maximum size of a message. If the size of a message exceeds the limit, the message is transferred by using OSS. Default value: 64 KB.
public void setBigMessageSize(long bigMessageSize) 
// Specify whether to delete the OSS object that contains the message. Default value: yes.
public void setNeedDeleteMessageObjectOnOSSFlag(boolean flag)           

Para mais detalhes sobre o código de exemplo, consulte o arquivo Demo.java.

Precauções

  • A transferência de mensagens grandes consome muita largura de banda de rede e pode causar gargalos nos clientes produtores e consumidores.

  • Essa transferência é demorada e suscetível a instabilidades de rede. Implemente tentativas de repetição na camada da aplicação caso ocorram erros.