Todos os produtos
Search
Central de documentação

ApsaraMQ for RabbitMQ:Conexões e canais

Última atualização: Jul 03, 2026

Uma conexão é um link físico TCP entre sua aplicação e o ApsaraMQ for RabbitMQ. Um canal é uma conexão virtual leve multiplexada nesse link TCP. Todas as operações do Advanced Message Queuing Protocol (AMQP) — declaração de filas, publicação de mensagens e consumo de mensagens — ocorrem nos canais, não diretamente na conexão.

Conexões

A conexão gerencia tarefas de rede subjacentes, como resolução de endereços IP, handshake TCP, negociação do protocolo AMQP, autenticação e roteamento. Estabelecer uma conexão requer aproximadamente 15 pacotes TCP. Devido a essa sobrecarga, crie conexões consome muitos recursos; portanto, elas devem ser duradouras.

Um grande volume de conexões de curta duração consome recursos significativos de rede e do servidor. Em altas taxas, a criação frequente de conexões pode acionar a proteção contra SYN flood e fazer com que a instância do ApsaraMQ for RabbitMQ pare de responder.

dg_connection

Canais

Um canal é uma conexão virtual estabelecida sobre uma conexão física TCP. Cada conexão pode transportar múltiplos canais. Ao fechar uma conexão, todos os seus canais também são encerrados.

Para conectar muitas aplicações ao ApsaraMQ for RabbitMQ visando o envio e o recebimento de mensagens, estabeleça uma quantidade razoável de conexões e reutilize múltiplos canais em cada uma. Essa abordagem reduz o uso de recursos do sistema em comparação à abertura de uma nova conexão TCP para cada operação.

dg_channel

Notas de uso

Utilize conexões persistentes

Abra as conexões na inicialização da aplicação e mantenha-as durante todo o ciclo de vida dela. Não abra e feche conexões para cada operação de publicação ou consumo.

Se sua carga de trabalho exigir criação frequente de canais, reutilize um conjunto estável de conexões e crie múltiplos canais dentro delas. Para verificar os limites nas taxas de abertura de conexões e canais, consulte Limites.

Separe as conexões de produtores e consumidores

Use pelo menos uma conexão para produzir mensagens e outra distinta para consumir. O ApsaraMQ for RabbitMQ aplica controle de fluxo (back pressure) às conexões que publicam mais rápido do que a instância consegue processar. Se produtores e consumidores compartilharem a mesma conexão, o controle de fluxo no lado da publicação pode atrasar os acknowledgments do consumidor e degradar o throughput de consumo.

Use um canal por thread

Várias threads podem compartilhar uma conexão. No entanto, os canais não são thread-safe na maioria das bibliotecas cliente. Atribua um canal exclusivo a cada thread em vez de compartilhar um canal entre várias threads.

// Anti-pattern: sharing a channel across threads
Channel shared = connection.createChannel(); // Not thread-safe

// Recommended: one channel per thread
ExecutorService executor = Executors.newFixedThreadPool(4);
for (int i = 0; i < 4; i++) {
    executor.submit(() -> {
        Channel ch = connection.createChannel();
        // Use ch for this thread's publish/consume operations
    });
}

Quando vários processos compartilham uma conexão, evite abri-la e fechá-la frequentemente. Caso contrário, pode ocorrer um erro ChannelNotFind.

Evite desbalanceamento no consumo

Quando apenas algumas conexões lidam com um grande volume de mensagens, o consumo pode ficar distribuído de forma desigual entre os consumidores. Para evitar isso:

  • Aumente o número de conexões por consumidor ou adicione mais consumidores.

  • Garanta que cada consumidor estabeleça o mesmo número de conexões.

  • Mantenha pelo menos 30 conexões totais de consumidores como diretriz geral.

Evite criação e fechamento frequentes de canais

Não crie e feche canais frequentemente dentro de uma única conexão. Mantenha a soma do TPS de channelOpen e channelClose abaixo de 1.000. Exceder esse limiar causa carga excessiva no broker.

Referência rápida

Diretriz

Detalhes

Ciclo de vida da conexão

Persistente. Abra na inicialização e feche no encerramento.

Ciclo de vida do canal

Abra por thread ou por lote de operações. Feche quando não for mais necessário.

Produtor vs. consumidor

Use conexões separadas para isolar o controle de fluxo.

Thread safety

Compartilhe conexões entre threads. Não compartilhe canais.

Conexões mínimas de consumo

Mais de 30 no total para evitar desbalanceamento no consumo.

Limites de taxa

Consulte Limites.