Sobes.tech
Back to questions
Junior — Middle
70

Можете объяснить концепцию Headers Exchange в RabbitMQ и как он отличается от других типов обменов?

Answer from AI

sobes.tech AI

Headers Exchange в RabbitMQ — это тип обменника (exchange), который маршрутизирует сообщения на основе заголовков (headers) сообщений, а не по routing key, как в Direct или Topic Exchange.

В Headers Exchange вы задаёте правила маршрутизации, основанные на совпадении значений определённых заголовков. Например, можно настроить очередь так, чтобы она получала сообщения, у которых заголовок "format" равен "pdf" и "type" равен "report".

Отличия от других типов обменников:

  • Direct Exchange — маршрутизация по точному совпадению routing key.
  • Topic Exchange — маршрутизация по шаблонам routing key с использованием подстановочных символов.
  • Headers Exchange — маршрутизация по набору заголовков, что даёт гибкость при сложных условиях фильтрации.

Пример настройки Headers Exchange на C# с использованием RabbitMQ.Client:

var factory = new ConnectionFactory() { HostName = "localhost" };
using var connection = factory.CreateConnection();
using var channel = connection.CreateModel();

channel.ExchangeDeclare(exchange: "headers_logs", type: "headers");

var headers = new Dictionary<string, object>
{
    {"format", "pdf"},
    {"type", "report"}
};

var properties = channel.CreateBasicProperties();
properties.Headers = headers;

string message = "Отчёт в PDF формате";
var body = Encoding.UTF8.GetBytes(message);

channel.BasicPublish(exchange: "headers_logs",
                     routingKey: "", // routingKey игнорируется в headers exchange
                     basicProperties: properties,
                     body: body);

Таким образом, Headers Exchange полезен, когда нужно маршрутизировать сообщения по множеству атрибутов, а не только по одному ключу.