В каком формате хранятся сообщения в RabbitMQ?

«В каком формате хранятся сообщения в RabbitMQ?» — вопрос из категории Брокеры сообщений, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Сообщения в RabbitMQ хранятся как бинарные данные (byte[]). Брокер не навязывает конкретный формат сериализации — это ответственность отправителя и потребителя. На практике чаще всего используют:

  1. JSON (через UTF-8 кодировку) — для простоты и читаемости.
  2. Protocol Buffers (Protobuf) — для эффективности и строгой схемы данных.
  3. MessagePack — как компромисс между размером и скоростью.
  4. Plain text или XML — в legacy-системах.

Пример публикации JSON-сообщения на C#:

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

// Объявляем очередь
channel.QueueDeclare(queue: "orders", durable: true, exclusive: false, autoDelete: false);

// Создаём объект и сериализуем в JSON
var order = new { OrderId = 123, Product = "Book", Quantity = 2 };
var jsonBody = JsonSerializer.SerializeToUtf8Bytes(order);

// Публикуем как массив байт
var properties = channel.CreateBasicProperties();
properties.Persistent = true; // Сохранить на диск
channel.BasicPublish(exchange: "", routingKey: "orders", basicProperties: properties, body: jsonBody);

Важные детали:

  • Само сообщение состоит из тела (body) и свойств (headers, properties), где properties могут содержать метаданные (content-type, message-id, timestamp).
  • Для указания формата можно использовать свойство ContentType (например, application/json).
  • Сообщения могут сохраняться на диск (durable queues) или храниться только в памяти.