Tipos de Exchange | RabbitMQ
- Tipos de Exchange | RabbitMQ
Quando você não define explicitamente uma exchange ao publicar uma mensagem no RabbitMQ, na real você está usando a default exchange — também chamada de exchange anônima, que é uma direct exchange especial e embutida no RabbitMQ. É uma direct exchange implícita, pré-definida no RabbitMQ, com o nome vazio ''.
Quando você publica uma mensagem sem especificar uma exchange ou usa exchange='', o RabbitMQ usa a default exchange. Nesse caso, o routing_key deve ser exatamente o nome da fila que você quer alcançar.
Tipos de troca
As trocas controlam o roteamento de mensagens para filas. Cada tipo de troca define um algoritmo de roteamento específico que o servidor usa para determinar para quais filas vinculadas uma mensagem publicada deve ser roteada.
O RabbitMQ fornece quatro tipos de trocas: Direct, Fanout, Topic e Headers.
Trocas diretas (Direct)
O tipo de troca direta direciona mensagens com uma chave de roteamento igual à chave de roteamento declarada pela fila de ligação. A seguir, ilustra como o tipo de troca direta funciona:
![]()

O tipo de troca direta é útil quando você deseja distinguir as mensagens publicadas na mesma troca usando um identificador de sequência simples. Esse é o tipo de troca usada no nosso exemplo do Hello World. Conforme discutido na parte 3 de nossa série, todas as filas são automaticamente vinculadas a uma troca padrão usando uma chave de roteamento igual ao nome da fila. Essa troca padrão é declarada como uma troca direta. Em nosso exemplo, a fila denominada “ hello-world-queue ” estava vinculada à troca padrão com uma chave de roteamento “ hello-world-queue ”, portanto, publicar uma mensagem na troca padrão ( identificada com uma sequência vazia ) roteou a mensagem para a fila chamada “ hello-world-queue ”.
Trocas de fanáticos (Fanout)
O tipo de troca Fanout direciona as mensagens para todas as filas encadernadas indiscriminadamente. Se uma chave de roteamento for fornecida, ela será simplesmente ignorada. O seguinte ilustra como o tipo de troca de fanout funciona:
![]()

O tipo de troca Fanout é útil para facilitar a padrão de publicação e inscrição. Ao usar o tipo de troca de fanout, diferentes filas podem ser declaradas para lidar com mensagens de diferentes maneiras. Por exemplo, uma mensagem indicando que um pedido do cliente foi feito pode ser recebida por uma fila cujos consumidores cumprem o pedido, outra cujos consumidores atualizam um histórico de pedidos somente leitura, e mais um cujos consumidores registram o pedido para fins de relatório.
Trocas de tópicos (Topic)
O tipo de troca de tópicos direciona as mensagens para filas cuja chave de roteamento corresponde a todas ou a parte de uma chave de roteamento. Com as trocas de tópicos, as mensagens são publicadas com chaves de roteamento contendo uma série de palavras separadas por um ponto ( por exemplo. word1.word2.word3 ). As filas vinculativas a uma troca de tópicos fornecem um padrão correspondente para o servidor usar ao rotear a mensagem. Os padrões podem conter um asterisco ( * ) para corresponder a uma palavra em uma posição específica da chave de roteamento ou um hash # para corresponder a zero ou mais palavras. Por exemplo, uma mensagem publicada com uma chave de roteamento honda.civic.navy corresponderia a filas vinculadas a honda.civic.navy, *, honda. # ou <TAG1, mas não corresponderia a honda.accord.navy, honda.accord.silver, * .accord. * ou for.#. O seguinte ilustra como o tipo de troca de fanout funciona:
![]()

O tipo de troca de tópicos é útil para direcionar mensagens com base em várias categorias ( por exemplo tipo de produto e preferência de remessa ) ou para rotear mensagens originadas de várias fontes ( por exemplo. logs contendo um nome de aplicativo e nível de gravidade ).
Trocas de cabeçalhos
Os cabeçalhos trocam mensagens de rotas de tipo com base na correspondência dos cabeçalhos de mensagens com os cabeçalhos esperados especificados pela fila de ligação. O tipo de troca de cabeçalhos é semelhante ao tipo de troca de tópicos, pois mais de um critério pode ser especificado como um filtro, mas a troca de cabeçalhos difere, pois seus critérios são expressos nos cabeçalhos das mensagens, em oposição à chave de roteamento, podem ocorrer em qualquer ordem, e pode ser especificado como correspondendo a um ou a todos os cabeçalhos especificados. O seguinte ilustra como o tipo de troca de cabeçalhos funciona:
![]()
O tipo de troca de cabeçalhos é útil para direcionar mensagens que podem conter um subconjunto de critérios conhecidos onde o pedido não está estabelecido e fornece uma maneira mais conveniente de correspondência com base no uso de tipos complexos como critérios de correspondência ( i.e. um objeto serializado ).