Ich habe online geschaut, und alles, was ich finde, zeigt, wie man einen separaten Server zur Verbindung mit dem Hauptserver macht, wenn es hinter einer NAT oder Firewall ist.Wie verbinde ich einen ActiveMQ Client, der hinter einem NAT steht mit einem Server, der das nicht tut?
Aber in meinem Fall ist der Client hinter dem NAT, und der Server ist im lokalen Netzwerk.
So ist es ein bisschen wie folgt einstellen:
Client Actual:10.0.0.1 -> Client NAT:100.0.0.2:1111 <--> Server 10.0.0.0:1099
Der Java-Code, den ich auf dem Server verbinden verwenden, wie unten:
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);
Und der Fehler wirft es ist:
java.rmi.ConnectException: Connection refused to host: 10.0.0.0; nested exception is:
java.net.ConnectException: Connection timed out: connect
Also meine Frage ist, wie kann ich diesen Client hinter NAT-Verbindung arbeiten?
Haben Sie versucht, den Client mit dem lokalen Netzwerk zu verbinden, ohne das NAT zu durchlaufen und zu sehen, ob Ihr Code funktioniert? Dann wissen Sie, ob es das NAT ist und nicht Ihr Code. –
Schauen Sie auf https://blogs.oracle.com/jmxetc/entry/connecting_through_firewall_using_jmx –
Oh ja, es funktioniert gut. Ich habe es auf einer anderen Maschine laufen, das ist nicht hinter dem NAT. Und ich zeige eine Warteschlange von meinem Broker. – user1479897