Шина обмена сообщениями

Сервисы перестают знать друг о друге

Один кладёт JSON в тему, другой забирает. Никто никому не звонит напрямую, ничего не теряется, и всегда видно, что кому уходило.

Проблема не в том, что связок много, а в том, что их число растёт быстрее сервисов

Пятый сервис добавляет не одну связку, а четыре. Каждая — код с обеих сторон, свой формат, своя логика повторов. Когда рвётся, первый вопрос всегда один: чья сторона виновата.

10 интеграцийточка-точка, пять сервисов
5 подключенийкаждый знает только шину

Отправитель не выбирает получателя. Понадобился ещё один потребитель — ему заводят подписку, и его код никак не касается того, кто отправляет.

Что это даёт в тот день, когда что-то сломалось

Видно, что было

«Что заказ №12345 ушёл в 14:32 и получил ли это биллинг» — один запрос вместо сопоставления логов двух систем.

Ничего не пропало

Потребитель лежал два часа — сообщения дождались его в очереди. Упал посреди обработки — вернутся сами.

Можно прогнать заново

Выкатили баг и обработали неправильно — сообщения перепроигрываются с нужного момента. Они никуда не делись.

Плохое не копится молча

Неудачное сообщение повторяется с растущей паузой, а потом уезжает в отдельный разбор — с причиной и телом, а не «где-то потерялось».

Подключение — это HTTP и всё

Ни библиотеки, ни драйвера, ни клиента под язык. Если ваш код умеет делать POST — он уже умеет работать с шиной. 1С, PHP, Python, Java, bash — разницы нет.

Отправитель

POST /topics/orders.created/messages
Authorization: Bearer …
Idempotency-Key: order-12345

{"orderId": 12345, "sum": 990.00}

Ключ идемпотентности — чтобы повтор при обрыве сети не создал второй заказ.

Получатель

GET  /subscriptions/billing/pull?wait=30
POST /subscriptions/billing/ack

Запрос сам ждёт появления сообщения. Не подтвердили — оно вернётся в очередь, а не исчезнет. Или наоборот: шина сама постучится к вам вебхуком с подписью.

Как начать

  1. Скажите, чем обмениваетесь

    Заводится тема — например, orders.created, — и подписка на каждого, кто будет это читать.

  2. Получите токен

    Отдельный на сервис и с узкими правами: отправителю — только публикация в свою тему, получателю — только его подписка.

  3. Проверьте на одном сообщении

    Отправьте тестовое и посмотрите в веб-интерфейсе, как оно прошло по очереди. Дальше — по инструкции: там готовый код продюсера и потребителя, проверка подписи вебхука и чек-лист интеграции. Описание всех запросов — в спецификации OpenAPI, её можно импортировать в Postman.

Чего шина не делает

Чтобы не выяснять это в бою: