Introdução: No RabbitMQ, todas as mensagens enviadas pelos produtores são aceitas pela Exchange, que então as encaminha para a Fila para armazenamento de acordo com uma política específica O RabbitMQ oferece quatro tipos de trocas: fanout, direto, tópico e cabeçalho O modo cabeçalho é menos utilizado na prática, e este artigo compara apenas os três primeiros modos.
1. Troca Direta
Quaisquer mensagens enviadas para a Direct Exchange são encaminhadas para a Fila especificada na RouteKey.
1. Em geral, você pode usar a Exchange que vem com rabbitMQ:" (o nome da Exchange é uma string vazia, doravante chamada de Exchange padrão).
2. Neste modo, não há necessidade de realizar operações de vinculação no Exchange
3. Uma "RotaChave" é necessária para a mensagem, que pode ser simplesmente entendida como o nome da fila para a qual será enviada.
4. Se o nome da fila especificado no RouteKey não existir no vhost, a mensagem é descartada.
2. Troca de Dispersão
Quaisquer mensagens enviadas para a Fanout Exchange são encaminhadas para todas as Filas vinculadas a essa Troca.
1. Pode ser entendido como um padrão da tabela de roteamento
2. Este modo não requer um RouteKey
3. Este modo exige vincular o Exchange à Queue com antecedência, um Exchange pode vincular múltiplas Queues e uma Queue pode ser vinculado a múltiplas Exchanges.
4. Se o Exchange que recebeu a mensagem não estiver vinculado a nenhuma Fila, a mensagem é descartada.
3. Troca de Temas
Quaisquer mensagens enviadas para o Topic Exchange são encaminhadas para todas as Filas que se preocupam com os tópicos especificados no RouteKey
1. Esse padrão é mais complexo, simplificando, cada fila tem seu próprio tópico de preocupação, todas as mensagens têm um "título" (RouteKey), e o Exchange encaminha a mensagem para todas as filas que possam corresponder ao RouteKey do tema em questão.
2. Este modo requer uma RouteKey, talvez vinculando Exchange e Queue antecipadamente.
3. Ao vincular, forneça um tópico que a fila se importe, como "#.log.#" para indicar que a fila se importa com todas as mensagens relacionadas a logs (uma mensagem com um RouteKey de "MQ.log.error" será encaminhada para a fila).
4. "#" significa 0 ou várias palavras-chave, e "" significa uma palavra-chave. Por exemplo, "log." Ele pode corresponder a "log.warn", mas não pode corresponder a "log.warn.timeout"; Mas "log.#" corresponde ao acima.
5. Da mesma forma, se o Exchange não encontrar uma Fila que corresponda à RouteKey, ela soltará essa mensagem.
|