У меня есть приложение Mule, которое принимает HTTP-запросы (входящая точка http). Когда я запускаю свой сервер, мне нужно убедиться, что приложение Mule готово принимать запросы, прежде чем запускать другую программу, назовем ее программой B, который является клиентом, отправляющим запросы в приложение Mule.
Хотя Mule запускается примерно в то же время, что и программа B в Ubuntu, программа B запускается гораздо быстрее, чем приложение Mule. Программа B получает «Отказ в подключении» Errno111 только до тех пор, пока приложение Mule не будет готово, что, хотя и не является критической проблемой (благодаря повторным попыткам), раздражает, когда происходит при каждом запуске. Поэтому мне нужно позволить программе B бездействовать в течение заданного времени, пока приложение не будет готово принимать запросы.
Пока я могу думать о двух способах сделать это. Во-первых, использовать жестко закодированное целое число в моем сценарии оболочки (программа B), например:
sleep 180
с надеждой, что приложение Mule будет готово достаточно долго. Это работает достаточно надежно, потому что Mule и приложение идентичны при каждом запуске сервера, и поэтому они, как правило, занимают одинаковое количество времени при одинаковом оборудовании/ОС.
Второе решение, о котором я думаю, — это проверить выходные данные Mule или новые строки, добавленные в его файл журнала, и запустить программу, когда приложение Mule будет готово к запуску. Когда приложение готово, у вас обычно есть подобная строка в главном журнале mule.log, а также в стандартном выводе:
+ Started app 'myapp' +
Затем я мог бы поспать несколько секунд, чтобы убедиться, а затем начать делать запросы.
Однако мне интересно, нет ли более изысканного способа сделать это. Например, программа B может ожидать уведомления от Mule, когда она будет готова. Или может быть способ запросить Mule более чистым способом, чтобы определить, готово ли приложение или нет.
Спасибо за ваши предложения!