Ответ
Сообщения в RabbitMQ хранятся как бинарные данные (byte[]). Брокер не навязывает конкретный формат сериализации — это ответственность отправителя и потребителя. На практике чаще всего используют:
- JSON (через UTF-8 кодировку) — для простоты и читаемости.
- Protocol Buffers (Protobuf) — для эффективности и строгой схемы данных.
- MessagePack — как компромисс между размером и скоростью.
- 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) или храниться только в памяти.