Re[2]: message/data bus
От: binks Россия  
Дата: 18.03.24 04:09
Оценка:
Здравствуйте, ·, Вы писали:

·>Здравствуйте, binks, Вы писали:


B>>Возникла необходимость реализовать шину сообщений.

B>>Предполагается следующий стандартный сценарий использования:
B>>1. Клиент делает запрос. В ответ получает идентификатор созданной задачи. Далее делает запросы по идентификатору запроса, чтобы узнать его статус, при завершении задачи получает ответ.
B>>2. Шина получает запрос и создаёт задачу. Если есть тот кто обработает этот тип задачи, то ему передаётся эта задача.
B>>3. Обработчик задачи формирует ответ при успешном завершении задачи или при ошибке. Размер данных в ответе относительно небольшой,
·>Не очень ясно что тут сообщение. Шина это просто штука для передачи сообщений.
·>Клиент делает запрос: кладёт сообщение в шину в определённый топик запросов. Обработчик запроса получает сообщение, делает вычисление, создаёт сообщение-ответ и кладёт в топик ответов. Клиент получает ответ. Что за "узнать статус"?
Я так понимаю что, то что описал это достаточно стандартный сценарий.
Клиент кидает в "шину" HTTP запрос, получает id запроса/задачи. Задача может быть долгоиграющей. Без WebSocket, используем только polling, соответственно клиент через определённый интервал запрашивает результат по id задачи.
"Шина" это сервер, который принимает запрос, присваивает этому запросу id задачи/запроса. Раскидывает/маршрутизирует задачи на подключённые к ней сервисы.
"Шина" и сервис работают через какой-то AMPQ. Для того же RabbitMQ есть разные паттерны RPC/RequestResponse. Сам сервис не знает что есть некий id задачи. Сервис, получив запрос от "шины", выполнив работу, обратно в этот же канал отдаёт результат работы. Когда "шина" получает ответ от сервиса, то в какую-то базу пишет ответ от сервиса по id задачи.
Если клиент запрашивает результат по id задачи, то "шина" знает что ответить клиенту.


B>>наверное до сотни килобайт (но что там будет дальше не знаю, может гораздо больше).

·>Обычно сообщения подразумеваются мелкие, до килобайта. Если больше — делают что-то вроде аттачей: большой результат кладётся в какой-нибудь сторадж, отправляется мелкое сообщение с указанием откуда взять результат.
Почему именно такое ограничение?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.