чтобы ответить на ваш вопрос, давайте добавим некоторые бизнес-требования
Случай 1 . M1 выполняет все взаимодействие с другими микросервисами на основе события, полученного, например, «Заказ размещен»
Теперь в этом случае обновление M2 ... M5,
требование 1: если все онинезависимо друг от друга.
сначала создайте 5 событий из одного события, а затем
. В таком случае вы можете добавить это событие в таблицу, отметив это событие как необработанное, и некоторые таймеры считываютнеобработанное событие и пытается выполнить все задачи идемпотентным способом, также вы можете получать отчеты, если такие задачи не выполняются, и ваша команда может проверить их и разрешить вручную.
(вы могли бы реализовать подобную логику, используя очередь аварийного переключения - которая через некоторое время отправляет то же событие обратно в исходную очередь)
требование 2: если все не являются независимыми
использовать одно событие и все то же решение.
в вышеприведенном решении главное преимущество - даже если ваша система перезапускается между транзакциями, у вас всегда будет согласованная система
Случай 2. если вызывается API M1 и M1 должен выполнить все задачи из нескольких микросервисов, а затем дать ответ пользователю.
мы могли бы создать запущенное событиев микросервисной базе данных M1 (sync_event_table) попробуйте выполнить обновление во всех микросервисах после завершения всего, обновите таблицу событий синхронизации с завершенными значениями
для тех случаев, которые не завершены - запустите таймер, который проверяет задания, которые не были выполненыдля> X мин, а затем выполните действия по отмене или все, что требуется,
Суть:
Так что если уВы видите, что все решения предлагают вашей системе повернуть все различия. микросервисное обновление
путем создания задания
проверка статуса задания
написание функции отмены / возврата задания