操作系统:Linux
RabbitMQ 3 编译安装
在内网项目中,需要使用到RabbitMQ加上SSL
让前端连接安全的WSS协议
内网IP自签证书参考如下配置
rabbitmq默认启动是可以不用配置文件的
使用SSL则需要rabbitmq的配置文件,也就是rabbitmq.conf(老版本则是rabbitmq.config)
cd到/etc/rabbitmq目录下
cd /etc/rabbitmq
如果该目录下没有rabbitmq.conf则新建一个
touch rabbitmq.conf && vim rabbitmq.conf
填入如下内容
listeners.ssl.default = 5671 #默认的SSL监听端口 ssl_options.cacertfile = /www/cert/rootCA.pem # CA根证书 ssl_options.certfile = /www/cert/192.168.1.180.crt # 公钥 ssl_options.keyfile = /www/cert/192.168.1.180.key # 私钥 web_stomp.ssl.port = 15671 # webstomp的wss监听端口 web_stomp.ssl.backlog = 1024 web_stomp.ssl.cacertfile = /www/cert/rootCA.pem # 同上面 web_stomp.ssl.certfile = /www/cert/192.168.1.180.crt # 同上面 web_stomp.ssl.keyfile = /www/cert/192.168.1.180.key # 同上面
系统防火墙开放5671和15671端口
firewall-cmd --zone=public --add-port=5671/tcp --permanent firewall-cmd --zone=public --add-port=15671/tcp --permanent firewall-cmd --reload
如果没有启用web-stomp服务则还需要启动该插件
rabbitmq-plugins enable rabbitmq_web_stomp
重启rabbitmq服务
systemctl restart rabbitmq-server
查看运行状态
systemctl status rabbitmq-server
已经成功应用了/etc/rabbitmq/rabbitmq.conf配置文件
到网页管理端查看配置
使用JS代码进行验证
验证的HTML+JS源码如下
直接用浏览器打开之后在控制台中就可以看到输出
<!DOCTYPE html> <html> <head> <title>demo</title> </head> <body> <h1>demo</h1> <script src="https://cdn.bootcdn.net/ajax/libs/stomp.js/2.3.3/stomp.min.js"></script> <script> const ip = "192.168.1.180" const port = "15671" const virtual_host = "test" const username = "test" const password = "test" const exchange_name = "amq.fanout" var client; var isConnected = false; var reconnectTimer; function connectToRabbitMQ(){ // 创建一个WebSocket连接对象 var socket = new WebSocket(`wss://${ip}:${port}/ws`); // 使用stomp.js创建Stomp客户端 client = Stomp.over(socket); // 连接到RabbitMQ的STOMP端口 client.connect(username, password, onConnect, errorCallback, virtual_host); } // 连接成功后的回调函数 function onConnect(frame) { console.log('Connected:', frame); // 设置连接状态为true isConnected = true; // 清除重连定时器 clearTimeout(reconnectTimer); // 在这里可以执行其他操作,如订阅、发送消息等 // 接收消息 client.subscribe(`/exchange/${exchange_name}`, function (message) { console.log('Received message:', message.body); }, { 'id': 'sub-' + Math.random().toString(36).substr(2, 10) }); // 发送消息到队列 let message = "aaaaaaaaaaaaaaaaaaaaaa" client.send(`/exchange/${exchange_name}`, { 'persistent': true }, // 消息持久化 message); } function errorCallback(e){ console.log('发生了错误:', e); // 设置连接状态为false isConnected = false; // 设置重连定时器,例如每隔 1 秒尝试重新连接 reconnectTimer = setTimeout(connectToRabbitMQ, 1000); } connectToRabbitMQ() </script> </body> </html>