在远程机器上启动 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 连接到远程计算机并执行命令(例如启动消息代理)。
我想在网络中的远程计算机上启动 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 连接到远程计算机并执行命令(例如启动消息代理)。