В англоязычной литературе можно встретить термины event и message.
Часто их путают между собой:
- Message — понятие шире, чем event, потому что в него могут входить, например, acknowledgment (подтверждение), error message (сообщение об ошибке).
- Event же всегда отражает факт изменения состояния.
Есть два ключевых паттерна проектирования событий. Давай посмотрим на них.
1. Event Notification (Уведомление)
В событии передается только ID объекта (например, order_id: 123).
JSON
{
"type": "payment-made",
"paymentId": "12345"
}
- Плюс: Легкое сообщение.
- Минус: Консьюмеру придется идти в твой сервис по API, чтобы узнать детали заказа (создается нагрузка).
2. Event-Carried State Transfer (Передача состояния)
Событие несет в себе все данные (сумму заказа, адрес, состав).
JSON
{
"type": "payment-made",
"paymentId": "12345",
"amount": 99.99,
"currency": "USD",
"customerId": "cust_789",
"merchantId": "merch_456",
"timestamp": "2025-01-15T10:30:00Z"
}
- Плюс: Консьюмеру не нужно дергать твое API, у него есть всё для работы.
- Минус: Сообщения становятся «жирными», их сложнее версионировать.