java - Mule:检查应用程序是否准备就绪

标签 java process mule app-startup

我有一个 Mule 应用程序,它接受 HTTP 请求(http 入站端点)。当我启动服务器时,我需要确保 Mule 应用程序已准备好接受请求,然后再启动另一个程序,我们称之为它程序B,这是向Mule应用程序发送请求的客户端。

虽然 Mule 与 Ubuntu 中的程序 B 几乎同时启动,但程序 B 的启动速度比 Mule 应用程序要快得多。在 Mule 应用程序准备就绪之前,程序 B 只会收到“连接被拒绝”Errno111,虽然这不是一个关键问题(感谢重试),但每次启动时都会出现这种情况,这很烦人。因此,我需要让程序 B 空闲一段给定的时间,直到应用程序准备好接受请求。

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

sleep 180

希望有足够的时间让 Mule 应用程序准备就绪。它确实工作得相当可靠,因为每次服务器启动时,Mule 和应用程序都是相同的,因此在相同的硬件/操作系统下,它们往往会花费相同的时间。

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

+ Started app 'myapp'                      +

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

但是,我想知道是否没有更精致的方法来做到这一点。例如,程序 B 可能是希望在准备就绪时收到 Mule 通知的程序。或者可能有一种方法以更简洁的方式查询 Mule,以判断应用程序是否准备就绪。

感谢您的建议!

最佳答案

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

在启动其他进程之前,由 jmx 客户端评估属性“Connected=true”。

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

关于java - Mule:检查应用程序是否准备就绪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23749624/

相关文章:

java - 从 Recyclerview 中包含的 editText 中获取文本

java - 如何让按钮选择 recyclerView 中的所有复选框?

macos - 在运行时在Mac OS X上设置进程名称

c# - 一个进程锁定文件

Mule ESB - 两个文件作为输入(同时等待)

mule - 如何在 Dataweave 中使用变量作为键

Java 正则表达式 ReplaceAll 未按预期工作

java - 如何解决编译的类版本和运行时版本之间的JDK版本不匹配?

Java - 如何将 ArrayList 保存到文件中并打开它?

c# - 如果进程以编程方式运行(来自 C#),则“没有这样的文件或目录”