Наши коллеги уже продемонстрировали преимущества автоматического выключателя, поэтому я сосредоточусь на практических примерах.
Итак, глядя на ваш пример, у вас есть поток, который должен вызывать API оплаты> Давайте предположим, что это «внешний» компонент. Без этого вызова весь поток, вероятно, не может считаться «успешно завершенным» (я понимаю, у вас есть какой-то онлайн-процесс, в котором платеж является одним из его основных шагов).
В этом случае прерыватель цепи действительно, вероятно, не будет таким полезным, если только в качестве запасного варианта вы не сохраните команду оплаты в каком-то промежуточном хранилище, а затем «повторно примените» логику оплаты.
Смысл автоматического выключателя в том, чтобы обеспечить разумный запасной вариант, так что поток не будет считаться отказавшим, если применяется логика восстановления.
Вот еще один пример, где автоматический выключатель имеет гораздо больше смысла.
Если вы создаете портал, подобный netflix, и в пользовательском интерфейсе есть виджет, который показывает «рекомендуемые» фильмы. Механизм рекомендаций учитывает фильмы, которые вы видели / любили раньше. Технически это "внешняя система" /microservice.
Теперь, что если поток, который заполняет данные для пользовательского интерфейса, не сможет получить рекомендации (например, если служба рекомендаций не работает), вы "провалите" весь поток?
Вероятно, нет, может быть, лучше показать «общий список» рекомендуемых фильмов и позволить пользователю приступить к работе с приложением.
В этом случае автоматический выключатель может быть хорошим выбором для реализации звонка в службу внешних рекомендаций.
Теперь, в чем разница между этим потоком и обработкой исключений?
Если причиной сбоя этой системы рекомендаций является некоторое временное отключение сети / медленная работа базы данных, вероятно, лучше всего дать этой услуге некоторое время, а не пытаться вызывать ее снова и снова, мы должны дать ей шанс «выздороветь».
Когда мы применяем автоматический выключатель, в период «разомкнутой цепи» наш код даже не пытается вызвать сервер, напрямую перенаправляя его к резервному методу.
С другой стороны, обычный блок try / catch будет всегда вызывать службу рекомендации.
Итак, в заключение, автоматический выключатель - это образец отказоустойчивости, как было указано в вопросе; это инструмент, который может быть применим в некоторых ситуациях и не имеет значения в других случаях.