Никакие службы не должны знать друг друга.

р: «Как я могу протолкнуть сообщение через группу асинхронных неупорядоченных микросервисов и узнать, когда это сообщение прошло через каждый из них?»

Я изо всех сил пытаюсь найти правильную систему обмена сообщениями / протокол для конкретной архитектуры микросервисов. Это не вопрос «что лучше», а вопрос о том, какие у меня есть варианты для шаблона / протокола проектирования.

у меня естьсообщение в начале очереди. Допустим, сообщение RabbitMQ с сериализованным JSONМне нужно это сообщение, чтобы пройти через произвольное количество микросервисовКаждый из этих микросервисов является долгосрочным, должен быть независимым и может быть реализован на разных языках.Порядок услуг, через которые проходит сообщение, не имеет значения. На самом деле, оно не должно быть синхронным.Каждый сервис можетприсоединять данные в исходное сообщение, но эти данные игнорируются другими службами. Там должен бытьнет конфликты слияния (каждый сервис записывает уникальный ключ). Ни один сервис не изменит или не уничтожит данные.однаждыу всех сервисов была своя очередьсообщение должно быть опубликовано во второй очереди RabbitMQ с исходными данными и новыми данными.Микросервисы не будут иметь других побочных эффектов. Если бы все это было в одном монолитном приложении (и на одном языке), функциональное программирование было бы идеальным.

Итак, вопрос в том, как правильно управлять этим сообщением через различные сервисы? яне хочу делать по одному, и порядок не важен. Но, если это так, как система может знать, когда все сервисы потерпели неудачу, и окончательное сообщение может быть записано в конечную очередь (чтобы у следующего пакета сервисов было движение).

Единственное, полу-элегантное решение, которое я мог придумать, было

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

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

Я открыт для какой-то службы "Пастух".

Я был бы признателен за любые варианты, которые я пропустил, и готов признать, что они могут быть лучшим, фундаментальным дизайном.

Спасибо.

Ответы на вопрос(2)

Ваш ответ на вопрос