Шина сообщений / очередь в микросервисах - PullRequest
0 голосов
/ 18 июня 2020

Мы планируем переписать наш бэкэнд для большего приложения.

Одна из его частей - использовать какую-то шину сообщений или систему очередей сообщений.

Мы ищем фреймворк где будет работать следующий код.

var topic = "products";
var mq = MessageQueueFactory.CreateMessageQueue(topic);
ProductInformation result = await mq.Publish(new ProductInformationSearchRequest(1337));
// work with the result

Что-то вроде этого. Я знаю, что это как бы против того, чтобы система ожидала ответа в той же функции, где был отправлен запрос.

Есть некоторые структуры, которые могут отвечать на сеанс. Но у вас будет отдельная очередь ответа.

Наша цель - отправить некоторую информацию в очередь. Фреймворки находят пункт назначения для отправки сообщения, и после того, как пункт назначения ответил, я возвращаю свой результат. Может существовать несколько пунктов назначения (одного типа). Не на все запросы нужно отвечать. Только те, которые предназначены для этого. Брокер сообщений или аналогичный тоже подойдет.

Есть ли что-то, что существует, или мне нужно создать оболочку вокруг чего-то? С помощью такой архитектуры мы можем устранить зависимости, которые есть у некоторых микросервисов прямо сейчас. Или нам даже нужно изменить нашу архитектуру, чтобы такая система работала? Имеет ли это вообще смысл?

Кстати: старый способ заключался / заключается в использовании REST и API-шлюза для связи между сервисами.

1 Ответ

0 голосов
/ 20 июня 2020

Посмотрите на temporal.io . Он позволяет писать код, который выглядит как синхронный вызов, но внутри является полностью асинхронным, использует очереди и сохраняет состояние вызова столько, сколько необходимо.

...