在远程机器上启动 ActiveMQ BrokerService

Starting an ActiveMQ BrokerService on a remote machine

我想在网络中的远程计算机上启动 BrokerService。 而不是

BrokerService broker = BrokerFactory.createBroker(new URI("broker:(tcp://localhost:61616)"));

我想要:

BrokerService broker = BrokerFactory.createBroker(new URI("broker:(tcp://remoteMachine:61616)"));

所以基本上我有一个应用程序应该可以远程执行所有操作。它应该从我的代码远程启动一个 ActiveMQ BrokerService,然后使用该代理发送和接收消息。一旦应用程序完成其工作,它应该关闭 BrokerService

我已经尝试了上面的代码,但它一直给我一个 JVM 绑定异常:

Failed to bind to server socket: tcp://remoteMachine:61616 due to: java.net.BindException: Cannot assign requested address: JVM_Bind

我可以看到端口没有被使用,但仍然抛出这个异常。

我认为您误解了 BrokerFactory.createBroker() 的实际作用。它不能在远程机器上创建代理。它可以 创建本地代理。您传递给它的 URI 只是提供本地代理的配置。此 URI 的语法记录在 here.

由于您在尝试创建本地代理时传递了远程计算机的名称,因此代理创建过程失败,因为它无法将侦听器绑定到该名称。该名称必须是您正在执行 createBroker() 方法的计算机的名称,或者更一般地说,localhost.

ActiveMQ 不提供任何在远程服务器上启动代理的方法。但是,这种功能实际上不属于消息代理的范围。这是操作系统本身提供的那种功能。例如,在 Linux 中,您有一个脚本可以通过 SSH 连接到远程计算机并执行命令(例如启动消息代理)。