我有一个接收 HTTP 请求(http 入站端点)的 Mule 应用程序。当我启动服务器时,我需要确保 Mule 应用程序在启动另一个程序之前准备好接收请求,我们称之为程序 B,这是向 Mule 应用程序发送请求的客户端。
虽然 Mule 与 Ubuntu 中的程序 B 几乎同时启动,但程序 B 的启动和启动速度要比 Mule 应用程序快得多。程序 B 只会在 Mule 应用程序准备好之前获得“连接被拒绝”Errno111,虽然这不是一个关键问题(由于重试),但每次启动时都会看到这种情况令人讨厌。因此,我需要让程序 B 空闲一段时间,直到应用程序准备好接收请求。
到目前为止,我可以想到两种方法来做到这一点。第一种是在我的 shell 脚本(程序 B)中使用硬编码整数,例如:
sleep 180
希望它足够长,让 Mule 应用程序准备就绪。它确实工作得非常可靠,因为每次启动服务器时 Mule 和应用程序都是相同的,因此在相同的硬件/操作系统下,它们往往花费相同的时间。
我正在考虑的第二个解决方案是检查 Mule 的输出或附加到其日志文件的新行,并在 Mule 应用程序准备好启动时触发程序。当应用程序准备就绪时,您通常在主 mule.log 和标准输出中都有这样的一行:
+ Started app 'myapp' +
然后我可以睡几秒钟以确定,然后开始提出请求。
但是,我想知道是否没有更精致的方法来做到这一点。例如,程序 B 可能是希望在准备好时收到 Mule 通知的程序 B。或者可能有一种方法可以以更简洁的方式查询 Mule,以判断应用程序是否准备就绪。
感谢您的建议!