我如何知道 RabbitMQ 应用程序是否已启动

How can I know whether RabbitMQ application has started

我有一个在 windows 服务器 2012 R2 上安装 rabbitmq 3.7.4、erlang 20.2 的 c# 代码,我需要知道应用程序(不是服务)何时启动。在 运行 rabbitmq-service installrabbitmq-service start 之后,我正在寻找指示应用程序为 运行 的命令行。我知道 wait pid_file, wait --pid pid 命令,但无法在我的机器上找到 pid 文件。文档说:

This command will wait for the RabbitMQ application to start at the node. It will wait for the pid file to be created if pidfile is specified

指定在哪里?

rabbitmq-echopid.bat returns:

The system cannot find the path specified.

在Windows上,RabbitMQ默认不创建PID文件,所以你必须发现PID,然后将其作为参数传递:rabbitmqctl.bat wait -P PID

要发现 PID,您可以 运行 使用您的 RabbitMQ 节点的名称进行以下操作:

.\rabbitmq-echopid.bat rabbit@my-hostname

此时有一个错误,在回显PID之前会先回显The system cannot find...。我提交了 this bug,很快就会有修复,但与此同时,您可以编辑 rabbitmq-echopid.bat 脚本,将 !TDP0! 更改为 %TDP0%

您还可以使用任何其他 Windows 工具来查找 erl.exe 进程的 PID 运行ning RabbitMQ - 请参阅脚本以获取 wmic.exe 的示例,或者您可以使用 tasklist,或 Powershell 等

在 windows,您可以 运行 以下批处理脚本:

START /B rabbitmq-server

START /wait cmd /c "rabbitmq-echopid.bat -n rabbit@`hostname` > rabbitmq_pid.txt"
set /p PID=<rabbitmq_pid.txt
echo %PID%
del rabbitmq_pid.txt

cmd /c "rabbitmqctl wait -P %PID%"

请注意,要使 rabbitmq-echopid 命令生效,您必须在节点名称前添加一个 -n

此外,在上面的批处理脚本中,节点名是通过将“rabbit@”与 hostname windows 命令(在反引号内)结合动态生成的。