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
Publishe noQueueBindAsync. 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
| RabbitMQ | HTTP |
|---|---|
| Exchange | Controller |
| RoutingKey | Route |
| Queue | Banco de dados |
Papel de cada componente
| Componente | Função |
|---|---|
| Producer | Envia a mensagem |
| Exchange | Decide para onde a mensagem vai |
| Routing Key | Regra usada pelo exchange |
| Queue | Armazena a mensagem |
| Bind | Diz: “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");