操作系统: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>