1.安装erlang 版本 24
首先执行命令
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel
下载地址:otp_src_24.0.tar.gz - Information sharing - KodExplorer - Powered by KodExplorer
解压文件 tar -zxvf otp_src_24.0.tar.gz
移动文件 mv otp_src_24.0 /usr/local/
切换目录 cd /usr/local/otp_src_24.0
创建即将安装的目录
mkdir ../erlang
配置安装路径
./configure --prefix=/usr/local/erlang
安装
make install
添加环境变量
echo 'export PATH=$PATH:/usr/local/erlang/bin' >> /etc/profile
刷新环境变量
source /etc/profile
查看安装
erl
2.安装 rabbitmq
下载地址:rabbitmq-server-3.8.16-1.el7.noarch.rpm - Information sharing - KodExplorer - Powered by KodExplorer
安装命令
rpm -ivh rabbitmq-server-3.8.16-1.el7.noarch.rpm --force --nodeps
启动
rabbitmq-server start
3.开启web插件
rabbitmq-plugins enable rabbitmq_management
rabbitmq-plugins enable rabbitmq_mqtt
4.关闭防火墙
systemctl stop firewalld.service
禁止开机启动防火墙
systemctl disable firewalld.service
5.添加用户
查看所有用户
rabbitmqctl list_users
添加一个用户
rabbitmqctl add_user admin 123456
配置权限
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
查看用户权限
rabbitmqctl list_user_permissions admin
设置tag
rabbitmqctl set_user_tags admin administrator
删除用户(安全起见,删除默认用户)
rabbitmqctl delete_user guest
最终以服务运行
systemctl start rabbitmq-server
会提示这个错误
./usr/lib/rabbitmq/bin/rabbitmq-server: line 82: not find 原因是erlang找不到
加入这2行代码,然后重新运行就好了,哈哈哈
ERLANG_HOME=/usr/local/erlang
export PATH=$PATH:$ERLANG_HOME/bin
更多功能
1.WS连接
开启
rabbitmq-plugins enable rabbitmq_web_mqtt 插件
var client = new Paho.MQTT.Client(wsbroker, wsport, "/ws", "myclientid_" + parseInt(Math.random() * 100, 10));
注意 第三个参数是ws 端口默认是 15675
WSS不想配置证书的看下面
记录一次HTTPS协议下JS连接MQ报错的问题
背景: 由于项目要使用mq, 经过筛选最终决定要使用rabbitmq, 首先从开发到测试(测试环境使用的是http协议)一切还很顺利, 但是部署到生产环境(https)上后mq连接失败, 故写改文章记录一下。
前端代码片段:
初始化对象
var ws = new WebSocket('ws://ip:port/ws');
- 1
初始化对象时报错:
Mixed Content: The page at 'https://xxx' was loaded over HTTPS, but attempted to connect to the insecure WebSocket endpoint 'ws://ip地址:15674/ws'. This request has been blocked; this endpoint must be available over WSS.
- 1
这段话的大致意思是: 页面通过HTTPS加载, 该请求不可用, 必须在wss上可用
因此我们对配置进行修改为:
var ws = new WebSocket('wss://ip:port/ws');
- 1
结果重点来了:
WebSocket connection to 'wss://ip:15674/ws' failed: Error in connection establishment: net::ERR_SSL_PROTOCOL_ERROR
- 1
websocket还是连接失败,大概意思就是: 连接出错, SSL协议错误。
说明证书有问题。因此, 找到了问题点就好解决了: 通过nginx做代理.
代码如下:
server {
listen 443;
server_name 域名;
ssl on;
ssl_certificate /root/ssl/1_域名_bundle.crt;
ssl_certificate_key /root/ssl/2_域名.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location /ws {
access_log /usr/local/nginx/logs/come-websocket.log;
proxy_pass http://ip:15674; # 代理rabbitmq
proxy_read_timeout 60s;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'Upgrade';
}
划重点:
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection ‘Upgrade’;
这两行表明:websocket连接进入的时候,进行一个连接升级将http连接变成websocket的连接
nginx在1.3版本以后支持websocket协议
最终:
var ws = new WebSocket('wss://{域名}/ws');
至此连接成功~