Skip to main content

Routing Key do RabbitMQ | Criação de fila | CSharp

  • Routing Key do RabbitMQ | Criação de fila | CSharp

success

Filas devem ser criadas pelos consumer

info

Apenas as exchange direct e topic aceitam routing key. O ponto é que na hora de publicar você informa no método e na hora de consumir você informa no queueBind

info

Routing key → ação/evento. Exemplo de nome: pedido.pagamento.autorizar


Uma explicação melhor sobre o routing key

Routing Key é o critério que o exchange usa para decidir PARA QUAL fila a mensagem vai.

  • O routing key é uma regra de roteamento que irá ter no Publish e no QueueBindAsync. Ela é usada para que o publicador não fique acoplado a filas e sim passe somente uma key falando que deve ser mandado para lá e a exchange irá saber qual fila foi vinculada com essa key. A exchange roteia a mensagem baseado no routing key porque ela não guarda mensagem, APENAS A FILA FAZ ISSO.

Analogia com HTTP

RabbitMQHTTP
ExchangeController
RoutingKeyRoute
QueueBanco de dados

Papel de cada componente

ComponenteFunção
ProducerEnvia a mensagem
ExchangeDecide para onde a mensagem vai
Routing KeyRegra usada pelo exchange
QueueArmazena a mensagem
BindDiz: “se a routing key for X, manda pra essa fila”

Exemplo de Publisher

  channel.ExchangeDeclare(exchange: "direct_logs", type: ExchangeType.Direct);

// Define a routing key para a mensagem
string routingKey = "info"; // Pode ser 'info', 'error', etc.

// A mensagem a ser publicada
string message = "This is an info log!";
var body = Encoding.UTF8.GetBytes(message);

// Publica a mensagem na exchange 'direct_logs'
channel.BasicPublish(exchange: "direct_logs",
routingKey: routingKey, // A chave de roteamento
basicProperties: null,
body: body);

Exemplo de Consumer

channel.ExchangeDeclare(exchange: "direct_logs", type: ExchangeType.Direct);

// Declara as filas
channel.QueueDeclare(queue: "info_logs", durable: false, exclusive: false, autoDelete: false, arguments: null);
channel.QueueDeclare(queue: "error_logs", durable: false, exclusive: false, autoDelete: false, arguments: null);

// Faz o binding das filas à exchange com as routing keys
channel.QueueBind(queue: "info_logs", exchange: "direct_logs", routingKey: "info");
channel.QueueBind(queue: "error_logs", exchange: "direct_logs", routingKey: "error");