2016-12-28 5 views
1

Чтобы кратко спросить, существует ли способ указать зависимость запуска приложения/приложения в Azure Service Fabric?Azure Service Fabric Укажите зависимость от службы/приложения Запуск при запуске

У меня есть две службы, скажем S1 и S2. S2 зависит от S1 и должен запускаться после запуска S1. В настоящее время S1 и S2 находятся в разных пакетах приложений. Я также могу поместить их в один пакет приложений, если это необходимо.

Он работает, если я начинаю сначала S1, а затем S2 во время развертывания. Однако, похоже, что у Service Fabric есть некоторые ремонтные работы, во время которых услуги перезапускаются. Теперь проблема в том, что порядок запуска S1 и S2 не гарантируется, что приводит к тому, что S2 не может прочитать некоторые конфигурации во время инициализации. S2 терпит неудачу, но продолжает работать.

В Service Fabric есть способ указать SetupEntryPoint», однако в этом случае сама S1 имеет„SetupEntryPoint“, к тому же я чувствую, что это не свойственно ставить длинный запущенный сервис под„SetupEntryPoint“.

Я m также думает о том, чтобы остановить S2, когда он не смог прочитать конфигурации из S1, в этом случае Service Fabric будет продолжать попытки перезапуска S2 до тех пор, пока S1 не начнется.

Но есть ли способ гарантировать, что S2 начинается после S1 через конфигурацию Service Fabric ?

+0

Я добавил логику в S2, чтобы обнаружить существование процесса S1 и задержать инициализацию, которая, казалось, работала – user2188649

ответ

1

У меня также была та же проблема. Я не думаю, что это возможно через Конфигурация Service Fabric.

В конце концов я придумал решение, что я перепроектирую сервис так, чтобы он не был полностью запущен, если не работает зависимая служба. В моем случае моя служба A зависит от службы B. Если служба A загружается первым, она будет вызывать сообщение на шине сообщений и ждать ответа службы B. Если служба B уже запущена, она ответит напрямую. Если служба B еще не запущена, как только она начнется, она ответит. Затем, когда служба A получает ответ, он просто продолжит запуск. Таким образом, он всегда сможет закончить запуск.

Еще один простой способ заключается в том, что если служба B не работает, просто выбросьте исключение в Service A. Service Fabric попытается запустить приложение в другом узле, и, надеюсь, к тому времени служба B будет работать. Нижняя сторона заключается в том, что первая начальная загрузка будет болезненно медленной (поскольку она будет продолжать повторять попытку, пока не появится правильный порядок), а также вы увидите много ошибок (но в конечном итоге исчезнут, когда все службы завершат запуск)

+0

Спасибо, это хорошие идеи! Между тем, я думаю, что команда ServiceFabric должна иметь функцию поддержки этого. – user2188649

+0

вы также можете запросить статус услуг с A и удерживать до тех пор, пока B не будет в сети https://docs.microsoft.com/en-us/rest/api/servicefabric/get-a-list-of-services – itaysk