O modo de tópico do RabbitMQ é semelhante ao modo de roteamento, mas a diferença é que o modo de tópico suporta correspondência de roteamento com curingas, enquanto o modo de roteamento suporta apenas correspondência exata.
Diagrama de arquitetura
Explicação:
- P representa o produtor, X representa a troca, e as filas vermelhas Q1, Q2 representam as filas, C1, C2 representam os consumidores.
- O tipo de troca é tópico.
- Lógica de encaminhamento de mensagens de troca de tópicos: ele corresponde à chave de roteamento na mensagem com as chaves de roteamento associadas a todos os vínculos da Troca por meio de correspondência de curingas, e se houver uma correspondência, ele envia a mensagem para a fila vinculada.
Dica: A diferença entre o modo de tópico e o modo direto está na correspondência da chave de roteamento com suporte a correspondência de curingas, todo o resto é o mesmo.
Os curingas suportados pelo tópico são os seguintes:
-
#
(jogo) corresponde a uma ou mais palavras -
*
(asterisco) corresponde a apenas uma palavra
Por exemplo:
A chave de roteamento vinculada à fila Q1 = *.orange.*
A chave de roteamento vinculada à fila Q2 = *.*.rabbit
e lazy.#
Se a chave de roteamento da mensagem for "quick.orange.rabbit", ela corresponde tanto à fila Q1 quanto à fila Q2.
Dica: Se a chave de roteamento não corresponder a nenhuma fila, a mensagem será descartada. Se a chave de roteamento estiver vazia, ela funcionará da mesma forma que o modo fanout e encaminhará a mensagem diretamente para todas as filas.
Caso de uso
Assim como o modo de roteamento, a diferença está na flexibilidade das condições de assinatura, especificamente nas regras de correspondência mais flexíveis para a chave de roteamento.