Некоторые вопросы, которые вам, возможно, придется задать, прежде чем углубляться в архитектуру. Я предполагаю, что WS1 и WS2 принадлежат вам / вашей команде.
- Как долго вы хотите ждать, пока WS2 снова включится и заработает, когда он выйдет из строя?
- Какое время ожидания ответа от WS1 и WS2?
- Есть ли какая-либо другая нисходящая служба, которая потребляет WS1, и если эта служба имеет SLA / время ожидания ответа?
- Как WS1 ожидает получить ответ от WS2?
Короче говоря, подход, основанный на событиях, выглядит здесь как нельзя лучше. то есть вы можете иметь очередь между WS1 и WS2, так что WS1 отправляет сообщение в очередь запросов, WS2 забирает его, когда готово, и помещает ответ в очередь ответов, откуда WS1 может его прочитать.
Пример. AWS и Azure .
Это может работать, а может и не работать, исходя из того, как вы можете отвечать на предыдущие запросы. Иногда лучше использовать обычный вызов на основе REST со стратегией повторения (например, стратегия экспоненциальный откат ). Благодаря этому вы также сможете быстрее получать отзывы о сбоях. Можно выбрать это, если ответы на вышеуказанные вопросы
- Если время ожидания короткое, то есть в секундах
- Ожидается очень быстрое время отклика. В этом случае лучше сразу сообщить о сбое, чем ждать его.
- Если есть последующие приложения, которые синхронно зависят от WS1, следовательно, WS1 не может бесконечно ждать, пока WS2 обработает запрос
- Нет предсказуемого канала ответа от WS2
На заметку: если вы используете архитектуру, основанную на событиях, WS2 может больше не быть веб-службой:)