Я пытаюсь понять различные методы, используемые при обмене сообщениями между службами.
Допустим, у меня есть сценарий, в котором мне нужна первая служба, чтобы уведомить другую о том, что пользователь запросил создание продукта, а вторая служба должна получить это сообщение, создать продукт, а затем ответить, сообщив первой службе, что продукт был созданный.
Я думаю, что команды вместе с запросом / ответом подходят для этого сценария, потому что первая служба должна будет адресовать другую конкретную службу и будет ждать обратной связи.
Я так понимаю:
События против команд:
События:
- обеспечить слабую связь между сервисами.
- выполните публикацию во все очереди, и службы, заинтересованные в таком сообщении, его заберут.
Команды:
- выполнять отправку в определенную очередь, поэтому ее будут использовать только службы, которые получают с помощью этой очереди.
Запрос / ответ против публикации / подписки:
Запрос / ответ:
В запросе / ответе первый сервисный запрос от другого выполняет операцию и ждет, пока ответ не будет получен от более позднего.
Опубликовать / подписаться:
Первый сервис просто публикует сообщение и продолжает обработку, не дожидаясь обратной связи или ответа.
Теперь я начал проектировать систему обмена сообщениями, используя RabbitMQ вместе с Masstransit saga (Masstransit.Automatonymous), которая, похоже, следует за событиями с помощью методов публикации / подписки.
Мой вопрос:
могу ли я использовать команды с публикацией или события с запросом / ответом?
Я правильно понимаю? и можно ли саги использовать с запросом / ответом?