Проблема в таких сценариях интеграции заключается в следующем: когда цель не работает, где вы можете сохранить сообщение, пока цель снова не появится?
Поскольку обычно у вас нет возможности сохранить данные, у вас нет другого выбора, кроме как вернуть их в источник.
Обычно это делается с помощью транзакционного потребления из источника. Вы потребляете сообщение от источника в транзакции. Когда вы можете обработать сообщение и доставить его адресату, вы фиксируете сообщение в исходной транзакции. С этого момента за сообщение отвечает цель.
Если вы не можете обработать сообщение или цель не работает, вы откатываете транзакцию, чтобы источник оставался ответственным за сообщение.
Таким образом, ваша интеграция никогда не несет ответственности за данные. Сообщения либо остаются в источнике, либо достигают цели.
Итак, возвращаясь к вашему вопросу, вам не нужно избегать отправки сообщения недоступному брокеру (как вы могли заранее узнать, что он не работает?), Но если отправка не удалась (по какой-либо причине), вам следует убедитесь, что сообщение не было удалено / зафиксировано в исходной системе.
Следующим шагом будет обработка сценариев повторных попыток, чтобы избежать повторения одного и того же сообщения снова и снова, пока ваш брокер не работает. Но это совершенно новая глава интеграции.
После объяснения основного принципа я должен добавить, что в системах обмена сообщениями брокеры являются сердцем системы и, следовательно, должны быть высокодоступными (кластер, сеть брокеров и т. Д.). Так что очень хорошо подумать о сценарии отказа от брокера, но это должен быть очень редкий крайний случай.
person
burki
schedule
07.07.2020