2016-10-07 13 views
0

Ich habe 2 Java-Anwendungen, die mit Spring-Websockets kommunizieren. Ich benutze ActiveMQ Version 5.12.3. Ich starte die Apps auf einem TomEE-Server. Dies ist die Konfiguration i für ActiveMQ in tomee.xml verwenden:Spring Websockets/Stomp Upgrade auf sichere Websockets

<Resource id="MyAppMessageBus" type="ActiveMQResourceAdapter"> 
    BrokerXmlConfig = broker:(tcp://localhost:61616,ws://0.0.0.0:61614,stomp://0.0.0.0:61613) 
    ServerUrl  = tcp://localhost:61616 
</Resource> 

Das ist mein Java-Code für den Anschluss:

if (brokerUrl.startsWith("ws")) { 
     WebSocketClient transport = new StandardWebSocketClient(); 
     stompClient = new WebSocketStompClient(transport); 
    } 

    stompClient.setMessageConverter(new MappingJackson2MessageConverter()); 
    stompClient.setTaskScheduler(taskScheduler); 
    stompClient.setDefaultHeartbeat(heartbeat); 
    stompClient.connect(brokerUrl, handler); 

ich folgenden Broker URL erfolgreich verbinden kann: ws: // localhost : 61614

Was ich tun möchte, ist mit sicheren Websockets verbinden. Wenn ich die URL in tomee.xml ändern WSS zu verwenden: // und die brokerurl in meinem Code aktualisieren, erhalte ich die folgende Ausnahme:

javax.websocket.DeploymentException: The HTTP request to initiate the WebSocket connection failed 
    at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:434) ~[tomcat7-websocket.jar:7.0.68] 
    at org.springframework.web.socket.client.standard.StandardWebSocketClient$1.call(StandardWebSocketClient.java:152) ~[spring-websocket-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.web.socket.client.standard.StandardWebSocketClient$1.call(StandardWebSocketClient.java:149) ~[spring-websocket-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) ~[na:1.7.0_80] 
    at java.lang.Thread.run(Thread.java:745) [na:1.7.0_80] 
Caused by: java.util.concurrent.ExecutionException: java.net.ConnectException: Connection refused 
    at sun.nio.ch.PendingFuture.get(PendingFuture.java:202) ~[na:1.7.0_80] 
    at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:376) ~[tomcat7-websocket.jar:7.0.68] 
    ... 4 common frames omitted 
Caused by: java.net.ConnectException: Connection refused 
    at sun.nio.ch.UnixAsynchronousSocketChannelImpl.checkConnect(Native Method) ~[na:1.7.0_80] 
    at sun.nio.ch.UnixAsynchronousSocketChannelImpl.finishConnect(UnixAsynchronousSocketChannelImpl.java:252) ~[na:1.7.0_80] 
    at sun.nio.ch.UnixAsynchronousSocketChannelImpl.finish(UnixAsynchronousSocketChannelImpl.java:198) ~[na:1.7.0_80] 
    at sun.nio.ch.UnixAsynchronousSocketChannelImpl.onEvent(UnixAsynchronousSocketChannelImpl.java:213) ~[na:1.7.0_80] 
    at sun.nio.ch.EPollPort$EventHandlerTask.run(EPollPort.java:293) ~[na:1.7.0_80] 
    ... 1 common frames omitted 

Kennt jemand eine einfache Möglichkeit, sichere WebSockets zu ermöglichen? Muss ich einen zusätzlichen Transport in meinem Code hinzufügen oder etwas zu meiner Serverkonfiguration hinzufügen?

Antwort

0

activemq nicht websocket durch das Standardprotokoll unterstützt, sondern nur durch Anlegesteg (siehe https://github.com/apache/activemq/blob/master/activemq-http/src/main/java/org/apache/activemq/transport/ws/WSTransportServer.java)

Sie haben nur wenige Möglichkeiten gibt:

  • try Anlegesteg Gläser hinzufügen (Achten Sie darauf, keine widersprüchlichen hinzuzufügen) in Tomee/lib
  • konfigurieren Sie einen externen Broker (Standalone activemq) und lassen Sie Tomee verbinden
+0

Ich habe bereits die benötigten Jetty funktioniert und kann verbinden, wenn ich ws: // Broker-URL verwenden. Aber ich möchte eine Verbindung mit sicheren Web-Sockets mit wss: // – rurounisuikoden

Verwandte Themen