骡子:检查应用程序是否准备就绪

时间:2014-05-20 01:22:46

标签: java process mule app-startup

我有一个接收HTTP请求的Mule应用程序(http inbount endpoint。)当我启动服务器时,我需要确保Mule应用程序准备好在我启动另一个程序之前接收请求,让& #39; s称之为程序B,即将请求发送到Mule应用程序的客户端。

虽然Mule与Ubuntu中的程序B几乎同时启动,但程序B比Mule应用程序更快起来。程序B仅获得"连接被拒绝" Errno111直到Mule应用程序准备就绪,虽然不是一个关键问题(感谢重试),但每次启动时都会发生这种情况很烦人。因此,我需要让程序B空闲一段时间,直到应用程序准备好接收请求为止。

到目前为止,我可以想到两种方法。第一种是在我的shell脚本(程序B)中使用硬编码的整数,例如:

sleep 180

希望Mule应用程序准备就绪足够长。它确实非常可靠,因为Mule和应用程序在每次启动服务器时都是相同的,因此在给定相同硬件/操作系统的情况下,它们往往需要相同的时间。

我想到的第二个解决方案是检查Mule的输出或附加到其日志文件的新行,并在Mule应用程序准备好启动时触发程序。当应用程序准备就绪时,你通常在主mule.log和stdout中都有这样的一行:

+ Started app 'myapp'                      +

然后我可以睡几秒钟以确定,然后开始提出请求。

然而,我想知道是否有更精致的方法来做到这一点。例如,程序B可能是预期Mule准备就绪时通知的程序。或者,可能有一种方法可以更清晰地查询Mule,以判断应用程序是否已准备就绪。

感谢您的建议!

2 个答案:

答案 0 :(得分:1)

Mule ESB有JMX interface,提供端点状态。

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

JMX MBean

评估属性&#39; Connected = true&#39;在启动其他进程之前由jmx客户端进行。

Mule.$YOUR_SERVICE_NAME > Endpoint > $FLOW_NAME > $CONNECTOR_NAME
  + Attribute: 'Connected' (true/false)

答案 1 :(得分:0)

作为一个解决方案,我每隔10秒向Mule发送一个测试请求(一个简单的GET而不是POST),如果我收到连接拒绝错误,那么循环继续。当请求通过时,程序B可以安全启动。在主流程中,我正在使用POST请求中的选项和单独的GET请求,因此POST请求执行他们一直以来所做的事情,而GET请求仅用于检查应用程序是否已启动。可能有一种更简单的方法从Mule获取信息,但这似乎远比等待几秒钟或点击日志要好得多。