我在网上看过,而且我找到的所有东西都显示了如何在独立服务器连接到主服务器(如果它位于NAT或防火墙后)。如何将位于NAT后面的ActiveMQ客户端连接到不是的服务器?
但在我的情况下,客户是NAT后面,服务器是在本地网络上。
所以它的设置有点象下面这样:
Client Actual:10.0.0.1 -> Client NAT:100.0.0.2:1111 <--> Server 10.0.0.0:1099
我用它来连接到服务器的Java代码如下:
String serviceUrl = "service:jmx:rmi:///jndi/rmi://10.0.0.0:1099/jmxrmi";
String[] credentials = new String[] {"username", "password"};
String objectName = "org.apache.activemq:type=Broker,brokerName=test";
JMXServiceURL url = new JMXServiceURL(serviceUrl);
Map<String, String[]> env = new HashMap<String, String[]>();
env.put(JMXConnector.CREDENTIALS, credentials);
JMXConnector jmxc = JMXConnectorFactory.connect(url, env);
conn = jmxc.getMBeanServerConnection();
broker = MBeanServerInvocationHandler.newProxyInstance(conn, new ObjectName(objectName), BrokerViewMBean.class, true);
而且它抛出的错误是:
java.rmi.ConnectException: Connection refused to host: 10.0.0.0; nested exception is:
java.net.ConnectException: Connection timed out: connect
所以我的问题是,如何让我的背后NAT连接工作这个客户端?
您是否尝试过将客户端连接到本地网络,而无需通过NAT,并查看您的代码是否正常工作?然后你会知道它是否是NAT,而不是你的代码。 –
看看https://blogs.oracle.com/jmxetc/entry/connecting_through_firewall_using_jmx –
哦,是的,它工作得很好。 我让它在不同的机器上运行,不在NAT后面。 而我正在显示来自我的经纪人的队列。 – user1479897