Regra de ouro: Connection e cara (TCP + handshake AMQP). Channel e leve (multiplexado na mesma connection). Use 1 connection com multiplos channels β€” 1 channel por thread.

Protocolo AMQP 0-9-1

RabbitMQ implementa o protocolo AMQP 0-9-1 (Advanced Message Queuing Protocol). O fluxo basico: o Producer publica mensagens em um Exchange, que roteia para Queues via Bindings. Consumers consomem das Queues.

publishbindingbindingbindingProducerExchangeQueue AQueue BQueue CConsumer 1Consumer 2Consumer 3

Virtual Hosts (vhosts)

vhosts sao namespaces logicos dentro de um mesmo broker. Cada vhost tem seus proprios exchanges, queues, bindings e permissoes. Usado para multi-tenancy β€” por exemplo, /production e /staging no mesmo cluster.

Conceitos-chave

ConceitoDescricao
ConnectionConexao TCP com o broker. Cara de criar (handshake AMQP + TLS). Reutilize sempre.
ChannelCanal logico multiplexado dentro de uma Connection. Leve. Use 1 por thread.
ExchangeRecebe mensagens do producer e roteia para queues via bindings. Nao armazena mensagens.
QueueBuffer que armazena mensagens ate serem consumidas. FIFO por padrao.
BindingRegra que liga um Exchange a uma Queue (com routing key ou headers).
vHostNamespace logico β€” isolamento de recursos (exchanges, queues, permissoes).
PrefetchNumero maximo de mensagens nao-acked que o broker envia ao consumer. Controla flow e balanceamento.
Dica: Connection e cara (TCP), Channel e leve. Use 1 connection com multiplos channels β€” 1 channel por thread. Nunca compartilhe um channel entre threads.
Por que usar channels ao inves de multiplas connections?
Cada Connection e uma conexao TCP completa com handshake AMQP (e possivelmente TLS). Isso consome file descriptors, memoria e tempo. Channels sao multiplexados na mesma Connection TCP β€” leves e rapidos de criar. O padrao recomendado e 1 Connection por aplicacao com 1 Channel por thread. Multiplas connections so fazem sentido para separar trafego de publish e consume em cenarios de alta carga.