RabbitMQ
Protocolo AMQP, exchanges, filas, confiabilidade e integracao com .NET
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.
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
| Conceito | Descricao |
|---|---|
| Connection | Conexao TCP com o broker. Cara de criar (handshake AMQP + TLS). Reutilize sempre. |
| Channel | Canal logico multiplexado dentro de uma Connection. Leve. Use 1 por thread. |
| Exchange | Recebe mensagens do producer e roteia para queues via bindings. Nao armazena mensagens. |
| Queue | Buffer que armazena mensagens ate serem consumidas. FIFO por padrao. |
| Binding | Regra que liga um Exchange a uma Queue (com routing key ou headers). |
| vHost | Namespace logico β isolamento de recursos (exchanges, queues, permissoes). |
| Prefetch | Numero 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.