【发布时间】:2024-05-19 23:10:01
【问题描述】:
我正在尝试设置 RabbitMQ Web Stomp 以直接从客户端 JavaScript 订阅 RabbitMQ 队列。尝试将 SSL 与 RabbitMQ Web Stomp javascript 客户端一起使用时出现错误。
RabbitMQ 服务器在 Docker 容器中正常运行,并且可以通过在另一个容器上运行 Java Spring 的 Tomcat Web 服务器顺利访问。
这里是 RabbitMQ 配置文件:
[
{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"}
]}
]}
].
Dockerfile 公开了以下端口:
EXPOSE 5671 61613 61614 15671 15672 15674
还有 docker-compose.yml 来设置 RabbitMQ 容器:
rabbitmq-server:
build: rabbitmq-ssl
image: gprevost/rabbitmq-ssl:latest
ports:
- "5671:5671"
- "61613:61613"
- "61614:61614"
- "15671:15671"
- "15672:15672"
- "15674:15674"
运行容器时,Rabbit Management 在端口 15672 上可用,并且可以访问 URL http://192.168.99.100:15674/ws、http://192.168.99.100:15674/stomp 和 http://192.168.99.100:15674/stomp/info。无法通过 HTTPS 访问相同的 URL。
我还设法从 Web 服务器后端直接使用 Java 中的 SSL(通过端口 5671)与 RabbitMQ 服务器交互(即连接和发送/接收消息)。
但是,当我尝试使用 HTTPS 通过 Javascript 进行连接时,连接会立即关闭(HTTPS 不仅出于安全目的需要,而且因为该页面是通过 HTTPS 加载的,因此所有 JavaScript 请求都需要确保不被浏览器屏蔽)。这是我使用的代码:
<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>
浏览器控制台出现如下错误:
sockjs.min.js:27 GET https://192.168.99.100:15674/stomp/info net::ERR_CONNECTION_CLOSED
知道我在哪里做错了吗?我不是 Web Sockets 或 STOMP 方面的专家,也不是 Erlang 开发人员,因此很难完全理解错误。非常感谢任何帮助!
在 RabbitMQ 服务器端,以下是该请求出现的日志,导致连接关闭:
rabbitmq-server_1 | =错误报告==== 20-Jun-2016::05:59:03 ===
rabbitmq-server_1 |牧场侦听器 http 的连接过程以 cowboy_protocol:start_link/4 在 退出,原因是:{function_clause,[{cowboy_protocol,parse_method,[>,{state,#Port,ranch_tcp,[ cowboy_router,cowboy_handler],false,[{listener,http},{dispatch,[{'_',[],[{[>,'...'],[],sockjs_cowboy_handler,{服务,"/stomp",#Fun,{},"//cdn.jsdelivr.net/sockjs/1.0.3/sockjs.min.js",false,true,5000,25000,131072,#Fun,undefined} },{[>],[],rabbit_ws_handler,[{type,text}]}]}]}],undefined,undefined,5,1,100,4096,64,4096,100,5000, 1466402348682,12115,215,2115,115,2115,215,215,2115,215,215,215,255,215,215,215,215,21985 ,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>>],[{file,"src/cowboy_protocol.erl"} ,{line,168}]}]}
rabbitmq-server_1 |
rabbitmq-server_1 | =错误报告==== 20-Jun-2016::05:59:03 ===
rabbitmq-server_1 |节点 rabbit@4391a6fed075 上的进程 出错,退出值:
rabbitmq-server_1 | {function_clause,
rabbitmq-server_1 | [{cowboy_protocol,parse_method,
rabbitmq-server_1 | [>,
rabbitmq-server_1 | {state,#Port,ranch_tcp,
rabbitmq-server_1 | [cowboy_router,cowboy_handler],
rabbitmq-server_1 |假的,
rabbitmq-server_1 | [{listener,http},
rabbitmq-server_1 | {调度,
rabbitmq-server_1 | [{'_',[],
rabbitmq-server_1 | [{[>,'...'],
rabbitmq-server_1 | [],sockjs_cowboy_handler,
rabbitmq-server_1 | {service,"/stomp",
rabbitmq-server_1 |有趣,{},
rabbitmq-server_1 | "//cdn.jsdelivr.net/sockjs/1.0.3/sockjs.min.js",
rabbitmq-server_1 |假,真,5000,25000,131072,
rabbitmq-server_1 | #Fun,未定义}},
rabbitmq-server_1 | {[>],[],rabbit_ws_handler,[{type,text}]}]}]}],
rabbitmq-server_1 |未定义,未定义,5,1,100,4096,64,4096,100,5000,1466402348684},
rabbitmq-server_1 |
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,0,20,192,10,192,20,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,0,2,1,0,0,10,0,8,0,6,0,29,0,
rabbitmq-server_1 | 23,0,24>>],
rabbitmq-server_1 | [{file,"src/cowboy_protocol.erl"},{line,168}]}]}
rabbitmq-server_1 |
rabbitmq-server_1 | =错误报告==== 20-Jun-2016::05:59:03 ===
rabbitmq-server_1 |牧场侦听器 http 的连接过程以 cowboy_protocol:start_link/4 在 退出,原因是:{function_clause,[{cowboy_protocol,parse_method,[>,{state,#Port,ranch_tcp,[ cowboy_router,cowboy_handler],false,[{listener,http},{dispatch,[{'_',[],[{[>,'...'],[],sockjs_cowboy_handler,{服务,"/stomp",#Fun,{},"//cdn.jsdelivr.net/sockjs/1.0.3/sockjs.min.js",false,true,5000,25000,131072,#Fun,undefined} },{[>],[],rabbit_ws_handler,[{type,text}]}]}]}],undefined,undefined,5,1,100,4096,64,4096,100,5000, 1466402348684},>],[{file,"src/cowboy_protocol.erl "}, {line,168}]}]}
如果有人可以帮助我解决这个问题,请提前感谢您。
【问题讨论】:
标签: javascript ssl rabbitmq stomp web-stomp