Ich versuche, RabbitMQ Web Stomp RabbitMQ-Warteschlangen direkt von clientseitigen JavaScript zu abonnieren. Ich habe Fehler bei der Verwendung von SSL mit dem RabbitMQ Web Stomp Javascript-Client.Fehler mit RabbitMQ + Web STOMP + JavaScript Client über HTTPS
Der RabbitMQ-Server läuft ordnungsgemäß in einem Docker-Container und wird problemlos über den Tomcat-Webserver mit Java Spring auf einem anderen Container aufgerufen. Hier
ist die RabbitMQ Konfigurationsdatei:
[
{rabbit, [
{ssl_listeners, [5671] },
{ssl_options, [
{cacertfile, "/etc/rabbitmq/ssl/ca/cacert.pem" },
{certfile, "/etc/rabbitmq/ssl/server/rabbitmq.cert.pem" },
{keyfile, "/etc/rabbitmq/ssl/server/rabbitmq.key.pem" },
{verify, verify_peer},
{fail_if_no_peer_cert, false}]},
{loopback_users, []}
]},
{rabbitmq_web_stomp, [
{ssl_config, [
{port, 15671},
{backlog, 1024},
{certfile, "/etc/rabbitmq/ssl/ca/cacert.pem"},
{keyfile, "/etc/rabbitmq/ssl/server/rabbitmq.cert.pem"},
{cacertfile, "/etc/rabbitmq/ssl/server/rabbitmq.key.pem"},
{password, "changeme"}
]}
]}
].
Die Dockerfile macht die folgenden Anschlüsse:
EXPOSE 5671 61613 61614 15671 15672 15674
Und die Docker-compose.yml den RabbitMQ Container einzurichten:
rabbitmq-server:
build: rabbitmq-ssl
image: gprevost/rabbitmq-ssl:latest
ports:
- "5671:5671"
- "61613:61613"
- "61614:61614"
- "15671:15671"
- "15672:15672"
- "15674:15674"
Beim Ausführen des Containers ist das Rabbit Management auf Port 15672 verfügbar d Die URLs http://192.168.99.100:15674/ws, http://192.168.99.100:15674/stomp und http://192.168.99.100:15674/stomp/info sind zugänglich. Die gleichen URLs über HTTPS funktionieren nicht.
Ich auch zu interagieren (d. H. Verbinden und senden/empfangen von Nachrichten) mit dem RabbitMQ-Server mit SSL direkt in Java (über Port 5671) von der Web-Server-Back-End.
Wenn ich jedoch über HTTPS versuche, eine Verbindung über Javascript herzustellen, wird die Verbindung sofort geschlossen (HTTPS ist nicht nur aus Sicherheitsgründen erforderlich, sondern auch, weil die Seite über HTTPS geladen wird und alle JavaScript-Anfragen gesichert werden müssen) nicht vom Browser blockiert werden). Hier ist der Code, die ich benutze:
<script src="//cdnjs.cloudflare.com/ajax/libs/sockjs-client/0.3.4/sockjs.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/stomp.js/2.3.3/stomp.min.js"></script>
<script th:fragment="script" th:inline="javascript" type="text/javascript">
$(document).ready(function(e) {
var ws = new SockJS("https://192.168.99.100:15674/stomp");
var client = Stomp.over(ws);
});
</script>
Der folgende Fehler in der Konsole des Browsers angezeigt wird:
sockjs.min.js: 27 GET https://192.168.99.100:15674/stomp/info net :: ERR_CONNECTION_CLOSED
Jede Idee Wo mache ich etwas falsch? Ich bin kein Experte für Web Sockets oder STOMP, und ich bin kein Erlang-Entwickler, was es ziemlich schwer macht, den Fehler vollständig zu verstehen. Jede Hilfe sehr geschätzt!
Auf der RabbitMQ Server-Seite, hier sind die Protokolle, die für diese Anforderung erscheinen, so dass die Verbindung geschlossen werden:
rabbitmq-server_1 | = FEHLERBERICHT ==== 20-Jun-2016 :: 05: 59: 03 ===
rabbitmq-server_1 | Ranch Listener http hatte Connection-Prozess mit cowboy_protocol gestartet: start_link/4 um < 0.27746.0> beenden mit Grund: {function_clause, [{cowboy_protocol, parse_method, [< < >>, {Zustand, # Port < 0.30021>, ranch_tcp, [ cowboy_router, cowboy_handler], false, [{zuhörer, http}, {ausgang, [{'_', [], [{< < "stampfen" >>, '...'], [], sockjs_cowboy_handler, { Dienst, "/ stomp", # Spaß, {}, "// cdn.jsdelivr.net/sockjs/1.0.3/sockjs.min.js ", falsch, wahr, 5000,25000,131072, # Spaß, undefiniert}}, {[< <" ws ">>], [], rabbit_ws_handler, [{Typ, Text}]}}}}}], undefiniert, undefiniert, 5,1,100,4096,64,4096,100,5000,1466402348682}, < < 22,3,1,0,137,1,0,0,133,3,2,124,30,85,16,113,253,213,38,165,219,181,225,215,84 87,194,106,235,193,207,37,26,166,115,208,87,3,91,89,138,121,207,0,0,16,192,10,192,20,192,9,192,19,0,53,0,47,0,10,86,0,1,0,0 76,255,1,0,1,0,0,23,0,0,0,35,0,0,0,5,0,5,1,0,0,0,0,51,116,0,0 0,18,0,0,0,16,0,20,0,18,8,115,112,100,121,47,51,46,49,8,104,116,116,112,47,49,46,49,117,80,0,0,0,11 , 0,2,1,0,0,10,0,8,0,6,0,29,0,23,0,24 >>], [{datei, "src/cowboy_protocol.erl"}, { Linie, 168}]}]}
rabbitmq-server_1 |
rabbitmq-ser ver_1 | = FEHLERBERICHT ==== 20-Jun-2016 :: 05: 59: 03 ===
rabbitmq-server_1 | Fehler im Prozess < 0.27747.0> am Knoten Hase @ 4391a6fed075 mit Ausgangswert:
rabbitmq-server_1 | {function_clause,
rabbitmq-server_1 | [{cowboy_protocol, parse_method,
rabbitmq-server_1 | [<]
rabbitmq-server_1 | {state, # Port < 0.30022>, ranch_tcp,
rabbitmq-server_1 | [cowboy_router, cowboy_handler],
rabbitmq-server_1 | falsch,
rabbitmq-server_1 | [{Listener, http},
rabbitmq-server_1 | {Versand,
rabbitmq-server_1 | [{'_', [],
rabbitmq-server_1 | [{[< < "stampfen" >>, '...'],
rabbitmq-server_1 | [], sockjs_cowboy_handler,
rabbitmq-server_1 | {service, "/ stomp",
rabbitmq-server_1 | Spaß, {},
rabbitmq-server_1 | "//cdn.jsdelivr.net/sockjs/1.0.3/sockjs.min.js "
rabbitmq-server_1 | false, true, 5000,25000,131072,
rabbitmq-server_1 | # Spaß, undefined}},
rabbitmq-server_1 | {[< <" ws ">>], [], rabbit_ws_handler, [{Typ, Text}]}]}]}],
rabbitmq-server_1 | undefined, undefined, 5,1,100,4096,64,4096,100,5000, 1466402348684},
rabbitmq-server_1 | < < 22,3,1,0,141,1,0,0,137,3,2,82,175,8,177,50,73,15,108,57,27,92,102,
rabbitmq-server_1 | 113,100,140,128,201,104,90,3,39,96,30,35,45,2,6,1,46,227,175,146,
rabbitmq-server_1 | 0,020,192,10,192,10,0,57,192,9,192,19,0,51,0,53,0,47,0,10,86,0,1,
rabbitmq-server_1 | 0,0,76,255,1,0,1,0,0,23,0,0,0,35,0,0,0,5,0,5,1,0,0,0,0,51,116, 0,0,
rabbitmq-server_1 | 0,18,0,0,0,16,0,20,0,18,8,115,112,100,121,47,51,46,49,8,104,116,
rabbitmq-server_1 | 116,112,47,49,46,49,117,80,0,0,0,11,2,2,1,0,0,10,0,8,0,6,0,29,0,
rabbitmq-server_1 | 23,0,24 >>],
rabbitmq-server_1 | [{Datei, "src/cowboy_protocol.erl"}, {Zeile, 168}]}}}
rabbitmq-server_1 |
rabbitmq-server_1 | = FEHLERBERICHT ==== 20-Jun-2016 :: 05: 59: 03 ===
rabbitmq-server_1 | Ranch Listener http hatte Connection-Prozess mit cowboy_protocol gestartet: start_link/4 um < 0.27747.0> mit Grund verlassen: {Funktion_Clause, [{Cowboy_Protocol, Parse_Method, [< < >>, {Zustand, # Port < 0.30022>, Ranch_tcp, [ cowboy_router, cowboy_handler], false, [{zuhörer, http}, {ausgang, [{'_', [], [{< < "stampfen" >>, '...'], [], sockjs_cowboy_handler, { service, "/ stomp", # Spaß, {}, "// cdn.jsdelivr.net/sockjs/1.0.3/sockjs.min.js",false,true5000,25000,131072,#Fun,undefined} }, {{< < "ws" >>], [], rabbit_ws_handler, [{type, text}]}}}}}, undefined, undefined, 5,1,100,4096,64,4096,100,5000, 1466402348684}, < < 22,3,1,0,141,1,0,0,137,3,2,82,175,8,177,50,73,15,108,57,27,92,102,113,100,140,128,201,104,90,3,39,96,30,35 , 45,2,6,1,46,227,175,146,0,0,20,192,10,192,20,0,57,192,9,192,19,0,51,0,53,0 47,0,10,86,0,1,0,0,76,255,1,0,1,0,0,23,0,0,0,35,0,0,0,5,0,5 1,0,0,0,0,0,51,116,0,0,0,18,0,0,0,16,0,20,0,18,8,115,112,100,121,47,51,46,49,8,104,116,116,112,47 , 49,46,49,117,80,0,0,0,11,0,2,1,0,0,10,0,8,0,6,0,29,0,23,0,24 >> ], [{Datei "src/cowboy_protocol.erl"}, {line, 168}]}]}
Vielen Dank im Voraus, wenn jemand kann dies helfen, mich aufklären.
Vielen Dank für die Antwort. Aber wie bereits erwähnt, habe ich SSL für RabbitMQ konfiguriert und es funktioniert mit einem Java-Client. Das Problem tritt auf, wenn Sie RabbitMQ Web STOMP mit SSL verwenden (übrigens sind die folgenden Plugins aktiviert: rabbitmq_management rabbitmq_stomp rabbitmq_web_stomp). –