Спецификация обмена сообщениями (Consumer)
Данный раздел описывает структуру данных и механизм обработки сообщений, поступающих из очереди RabbitMQ. Эта информация необходима для партнеров, которые планируют интегрироваться с SMS-шлюзом через брокер сообщений для обеспечения высокой пропускной способности.
1. Параметры подключения
Для подключения к брокеру сообщений используются следующие параметры (предоставляются администратором системы):
| Параметр | Описание | Пример значения |
|---|---|---|
| Virtual Host | Виртуальный хост партнера | /partner-api |
| Exchange | Точка обмена | sms.exchange |
| Queue | Очередь сообщений | sms.outgoing.queue |
| Routing Key | Ключ маршрутизации | sms.text.# |
| Exchange Type | Тип обменника | topic |
2. Контракт данных (JSON)
Система ожидает сообщения в формате JSON. Ниже приведена спецификация модели сообщения NotificationRequest.
Структура сообщения
{
"Header": {
"Protocol": {
"Name": "SMS-Protocol",
"Version": "2.0"
},
"MessageId": "a1b2c3d4-e5f6-7890-1234-567890abcdef",
"MessageDate": "2024-01-29T12:00:00Z",
"Originator": {
"System": "Partner-CRM"
}
},
"Body": {
"Notification": {
"Id": 987654321,
"CreationDate": "2024-01-29T12:00:00Z",
"Channel": "SMS",
"Receiver": "992900000000",
"Content": "Ваш код подтверждения: 5544",
"CustomAttributes": {
"CustomAttribute": [
{
"Code": "Priority",
"Value": "High"
},
{
"Code": "Tag",
"Value": "Marketing"
}
]
}
}
}
}
Описание полей модели
Header (Заголовок)
Служебная информация для трассировки и версионирования.
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
MessageId |
UUID/String | Да | Уникальный идентификатор сообщения (Request ID). Используется для дедупликации и логирования. |
MessageDate |
DateTime | Да | Время формирования сообщения (UTC). |
Originator.System |
String | Да | Идентификатор системы-отправителя (выдается при регистрации). |
Protocol |
Object | Нет | Информация о версии протокола. |
Body (Тело)
Содержит полезную нагрузку уведомления.
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
Notification.Id |
Long | Да | Внутренний ID уведомления в системе партнера. |
Notification.Receiver |
String | Да | Номер телефона получателя в международном формате (без +). Пример: 992900123456. |
Notification.Content |
String | Да | Текст SMS сообщения. |
Notification.Channel |
String | Нет | Канал отправки. Значение по умолчанию: SMS. |
CustomAttributes |
Array | Нет | Дополнительные атрибуты (ключ-значение) для настройки маршрутизации или приоритетов. |
3. Логика обработки
- Прием: Сообщения вычитываются из очереди в асинхронном режиме.
- Валидация: Проверяется заполнение обязательных полей (
Receiver,Content,MessageId). - Маршрутизация: На основе
Receiverи атрибутов сообщение передается соответствующему SMS-провайдеру. - Подтверждение (Ack):
- При успешной валидации и постановке во внутреннюю очередь отправляется
BasicAck. - В случае неверного формата JSON сообщение отклоняется (
BasicRejectбез возврата в очередь). - В случае временных сбоев сообщение может быть возвращено в очередь (
BasicNackсrequeue=true) или отправлено в Dead Letter Exchange.
- При успешной валидации и постановке во внутреннюю очередь отправляется
4. Пример десериализации (C#)
Пример класса для маппинга входящего JSON:
public class NotificationRequest
{
public HeaderModel Header { get; set; }
public BodyModel Body { get; set; }
}
public class HeaderModel
{
public string MessageId { get; set; }
public OriginatorModel Originator { get; set; }
}
public class BodyModel
{
public NotificationData Notification { get; set; }
}
public class NotificationData
{
public string Receiver { get; set; }
public string Content { get; set; }
}