Mule: проверка готовности приложения

У меня есть приложение 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 более чистым способом, чтобы определить, готово ли приложение или нет.

Спасибо за ваши предложения!


person Loic Duros    schedule 20.05.2014    source источник


Ответы (2)


Mule ESB имеет интерфейс JMX, предоставляющий статус конечной точки.

<management:jmx-server>
   <management:connector-server url="service:jmx:rmi:///jndi/rmi://localhost:1099/server" rebind="false" />
</management:jmx-server>

JMX MBean

Оцените атрибут «Connected = true» клиентом jmx перед запуском другого процесса.

Mule.$YOUR_SERVICE_NAME > Endpoint > $FLOW_NAME > $CONNECTOR_NAME
  + Attribute: 'Connected' (true/false)
person Ben Asmussen    schedule 21.08.2014

В качестве решения я отправляю тестовый запрос (простой GET, а не POST) в Mule каждые 10 секунд, если я получаю сообщение об ошибке отказа в соединении, цикл продолжается. Когда запрос пройдет, программа B может безопасно запуститься. В основном потоке я использую выбор и отделяю запросы GET от запросов POST, поэтому запросы POST делают то, что они всегда делали, а запрос GET используется только для проверки того, работает ли приложение или нет. Может быть более простой способ получить информацию от Mule, чем этот, но он кажется намного лучше, чем ожидание нескольких секунд или просмотр журнала.

person Loic Duros    schedule 20.05.2014