RabbitMQ

提示

消息队列中间件(简称消息中间件)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下提供应用解耦、弹性伸缩、冗余存储、流量削峰、异步通信、数据同步等等功能,其作为分布式系统架构中的一个重要组件,有着举足轻重的地位。

配置

Linux编译安装Erlang

# 下载 http://www.erlang.org/downloads
tar -xzvf otp_src_23.1.tar.gz
cd otp_src_23.1
# 安装 openssl
# ubuntu
sudo apt-get install libncurses5-dev libssl-dev openssl
./configure && make
sudo make install
1
2
3
4
5
6
7
8

Mac 安装

brew install openssl
brew upgrade erlang
brew upgrade rabbitmq
# 后台启动
brew services start rabbitmq
# 或 前台启动
rabbitmq-server
1
2
3
4
5
6
7
# 输入 erl
# 显示
Erlang/OTP 23 [erts-11.1] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [hipe]
# 说明安装成功
1
2
3
4

安装RabbitMQ

- 查看最新版本:https://github.com/rabbitmq/rabbitmq-server/releases
- 注意:下载 rabbitmq-server-generic-unix-***.tar.xz 版本
- 下载:wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.9/rabbitmq-server-generic-unix-3.8.9.tar.xz
- 解压:1. xz -d ***.tar.xz; 2. tar -xvf  ***.tar
- 前台启动: ./sbin/rabbitmq-server
- 后台启动: ./sbin/rabbitmq-server -detached
- 停止运行: ./sbin/rabbitmqctl stop
- 查看状态: ./sbin/rabbitmqctl status

- 启用管理后台:
    ./sbin/rabbitmq-plugins enable rabbitmq_management
    ./sbin/rabbitmq-plugins enable rabbitmq_shovel rabbitmq_shovel_management
# - 禁用:
#     ./sbin/rabbitmq-plugins disable rabbitmq_management
# - 启用mqtt:  
    # ./sbin/rabbitmq-plugins enable rabbitmq_mqtt
    # ./sbin/rabbitmq-plugins enable rabbitmq_web_mqtt
    # ./sbin/rabbitmq-plugins enable rabbitmq_web_mqtt_examples
# -禁用:
#     ./sbin/rabbitmq-plugins disable rabbitmq_mqtt
#     https://www.rabbitmq.com/mqtt.html
# - 启用stomp:
    # ./sbin/rabbitmq-plugins enable rabbitmq_web_stomp
    # ./sbin/rabbitmq-plugins enable rabbitmq_web_stomp_examples
    # https://www.rabbitmq.com/web-stomp.html
    # 测试实例: http://127.0.0.1:15670/

- 登录管理后台: http://localhost:15672, guest/guest
- 其他:https://www.rabbitmq.com/man/rabbitmqctl.8.html#set_user_tags

- 添加管理员账号:
- ./sbin/rabbitmqctl add_user 用户名 密码
- ./sbin/rabbitmqctl set_user_tags 用户名 administrator
- ./sbin/rabbitmqctl set_permissions -p "/" 用户名 ".*" ".*" ".*"

- 添加访客: ./sbin/rabbitmqctl add_user visitor visitor
- 添加访问控制: ./sbin/rabbitmqctl set_permissions -p "/" visitor ".*" ".*" ".*"
# - 添加ios端授权用户:./sbin/rabbitmqctl add_user mqtt_ios mqtt_ios
# - 添加访问控制: ./sbin/rabbitmqctl set_permissions -p "/" mqtt_ios ".*" ".*" ".*"
# - 添加android端授权用户:./sbin/rabbitmqctl add_user mqtt_android mqtt_android
# - 添加访问控制: ./sbin/rabbitmqctl set_permissions -p "/" mqtt_android ".*" ".*" ".*"
# - 添加web端授权用户:./sbin/rabbitmqctl add_user stomp_web stomp_web
# - 添加访问控制: ./sbin/rabbitmqctl set_permissions -p "/" stomp_web ".*" ".*" ".*"
# - 添加windows端授权用户:./sbin/rabbitmqctl add_user mqtt_windows mqtt_windows
# - 添加访问控制: ./sbin/rabbitmqctl set_permissions -p "/" mqtt_windows ".*" ".*" ".*"
# - 添加mac端授权用户:./sbin/rabbitmqctl add_user mqtt_mac mqtt_mac
# - 添加访问控制: ./sbin/rabbitmqctl set_permissions -p "/" mqtt_mac ".*" ".*" ".*"

- 查看:./sbin/rabbitmqctl list_permissions -p /

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

为支持定时任务,需要安装延迟队列插件

  • 下载 rabbitmq-delayed-message-exchange
  • 将下载之后的文件,放到rabbitmq安装目录plugins文件夹,其中mac m1(brew install rabbitmq)安装目录为:/opt/homebrew/Cellar/rabbitmq/3.9.11/plugins/
  • 执行命令:./sbin/rabbitmq-plugins enable rabbitmq_delayed_message_exchange

Spring Boot 配置文件

#
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=你的用户名
spring.rabbitmq.password=你的密码
#
# spring.rabbitmq.stomp.port=61613
# spring.rabbitmq.stomp.login=stomp_web
# spring.rabbitmq.stomp.passcode=stomp_web
1
2
3
4
5
6
7
8
9

集群

spring.rabbitmq.addresses=127.0.0.1:5672,127.0.0.2:5672,127.0.0.3:5672
1

rabbitmq集群

RabbitMQ Cluster是根据Erlang的实现的。必须满足一下几个要求:

  • 所有机器上,必须Erlang运行时和RabbitMQ的版本相同。(否则会不能连接到一起)
  • 所有机器上,的Erlang的Cookie都相同。
# 集群中所有机器的/etc/hosts文件中必须同时包含集群中所有机器 ip hostname
# 同步hosts, hostname可以自行修改
vi /etc/hosts
192.168.0.1 mq-master
192.168.0.2 mq-slave-01
192.168.0.3 mq-slave-02
1
2
3
4
5
6
# 将任意一台服务器的~/.erlang.cookie文件同步到其他所有服务器(所有服务器必须一致,文件内容相同)
# 同步.erlang.cookie
1
2
# 192.168.0.1
# 让当前rabbitmq-server的进程后台运行
./sbin/rabbitmq-server -detached
# # 启动集群
# ./sbin/rabbitmqctl start_app
 # 获得集群配置信息
./sbin/rabbitmqctl cluster_status
1
2
3
4
5
6
7
# 192.168.0.2 && 192.168.0.3
./sbin/rabbitmq-server –detached
# ./sbin/rabbitmqctl start_app
./sbin/rabbitmqctl stop_app  #停止rabbitmq运行
./sbin/rabbitmqctl join_cluster --ram rabbit@mq-master  #加入到rabbit节点中,使用内存模式。
./sbin/rabbitmqctl start_app  #启动rabbitmq
./sbin/rabbitmqctl cluster_status  #查看状态
1
2
3
4
5
6
7
# 在所有三台机器运行
# ["^"匹配所有]
./sbin/rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
1
2
3

微信公众号

参考