Супервизор порождает процессы, которые в случае сбоя переключаются на другие процессы.

У меня есть две реализации genserver, обе из которых выполняют поиск, отправляя http-запрос, и обе возвращают одну и ту же информацию, для этого они используют разных провайдеров.

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

По сути, то, что я пытаюсь выполнить, - это своего рода отказоустойчивость процесса: попробуйте процесс A, и если A не удастся, попробуйте процесс B.

Что бы вы порекомендовали, это лучший способ сделать это в Эликсире?


person Zac    schedule 11.11.2016    source источник


Ответы (1)


Вы можете создать другой прокси-процесс (менеджер), который получает HTTP-запросы, и решить, обрабатывает ли этот запрос процесс_A или процесс_B, а затем выполнить отработку отказа другому процессу при отработке отказа.

Другими словами, я думаю, что это не работа рабочих процессов по обработке отказа, это должен взять на себя процесс менеджера.

person keroro520    schedule 11.11.2016
comment
Спасибо и я полностью согласен. И как бы вы порекомендовали мне сделать менеджер прокси-процессов? - person Zac; 11.11.2016
comment
Взгляните на руководство по эликсиру здесь, elixir-lang.org/getting-started/mix-otp/, вы можете настроить менеджер прокси-процессов на запуск процессов_A и _B и отслеживать их. Может быть сложно выполнить в handle_call. Я не пробовал что-то подобное. - person Alejandro Huerta; 15.11.2016