Перейти к содержанию

Реализация стилей взаимодействия

Механизмы обмена сообщениями достаточно гибки, чтобы реализовать все стили взаимодействия. Вот как реализуется каждый.

Реализация синхронных и асинхронных запросов/ответов

Pasted image 20210911183223.png
Клиент и сервис могут взаимодействовать, отправляя запросы и принимая ответы. Если это происходит синхронно, клиент ожидает немедленного ответа от сервиса, если асинхронно — не ждёт. Обмен сообщениями по природе асинхронен, но клиент может блокироваться, пока не получен ответ.
Чтобы реализовать стиль взаимодействия, клиент и сервис обмениваются парными сообщениями через каналы типа “точка-точка” (см. рисунок). Сначала клиент отправляет в канал сервиса команду с указанием операции и ее параметров, а также идентификатором запроса и каналом ответа в заголовке. Сервис обрабатывает команду и записывает свой ответ в указанный канал с указанием идентификатора соответствия равного идентификатору запроса. Клиент использует идентификатор соответствия, чтобы сопоставить ответ с запросом.
Поскольку клиент и сервис взаимодействуют с помощью сообщений, их общение асинхронно. Теоретически, клиент может заблокироваться в ожидании ответа. Кроме того, легко сделать так, чтобы ответ обрабатывался любым экземпляром клиента.

Реализация однонаправленных уведомлений

Клиент шлет сообщение (обычно командное) в канал типа “точка-точка”, принадлежащий сервису. Сервис подписывается на канал и обрабатывает сообщения, не возвращая ничего в ответ.

Реализация стиля “издатель/подписчик”

Клиент публикует сообщение в канале типа “издатель-подписчик” сообщение, которое считывается несколькими потребителями. Сервисы используют этот стиль взаимодействия для публикации доменных событий (изменений в доменных объектах). Обычно одному типу доменных объектов соответствует один канал.

Реализация стиля “издатель/асинхронные ответы”

Этот стиль сочетает в себе стили “издатель/подписчик” и “запрос/ответ”. Клиент публикует в канале “издатель-подписчик” сообщение с каналом ответа в заголовке. Потребитель записывает в канал ответа (типа “точка-точка”) ответное сообщение с идентификатором взаимодействия. Клиент принимает ответы и сопоставляет их с запросом при помощи идентфикатора взаимодействия.


Последнее обновление : 5 июня 2023 г.
Дата создания : 25 июля 2022 г.

Комментарии

Комментарии