before
RabbitMQ是基于 Erlang 语言开发的,因此它的不同版本通常要求使用特定版本的 Erlang 运行环境。
下面是 RabbitMQ 和 Erlang 版本之间的对应关系:https://www.rabbitmq.com/which-erlang.html
for windows
版本对照选择:https://www.rabbitmq.com/which-erlang.html
安装erlang
1. 下载
选择26.2.1版本:https://www.erlang.org/patches/otp-26.2.1
2. 双击安装包进行安装
安装位置可以自定义,但避开中文和空格的路径。
3. 配置环境变量
添加erlang的环境变量,也就是把erlang的安装目录添加到系统变量中。
再将erlang安装目录中的bin目录添加path中:
4. 测试
Microsoft Windows [Version 10.0.22621.3007]
(c) Microsoft Corporation。保留所有权利。
C:\Users\12061>erl -version
Erlang (SMP,ASYNC_THREADS) (BEAM) emulator version 14.2.1
2
3
4
5
返回版本号即可。
安装rabbitmq
1. 下载
下载链接:https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.12.12
2. 安装
3. 添加环境变量
4. 安装管理插件
新打开一个cmd终端执行下面的命令:
rabbitmq-plugins enable rabbitmq_management
C:\Users\12061>rabbitmq-plugins enable rabbitmq_management
Enabling plugins on node rabbit@zhangkai:
rabbitmq_management
The following plugins have been configured:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatch
Applying plugin configuration to rabbit@zhangkai...
The following plugins have been enabled:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatch
set 3 plugins.
Offline change; changes will take effect at broker restart.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
5. 启动服务
cmd终端执行下面的命令:
rabbitmq-server
C:\Users\12061>rabbitmq-server
2024-01-16 20:31:25.814000+08:00 [warning] <0.135.0> Using RABBITMQ_ADVANCED_CONFIG_FILE: c:/Users/12061/AppData/Roaming/RabbitMQ/advanced.config
2024-01-16 20:31:28.604000+08:00 [notice] <0.44.0> Application syslog exited with reason: stopped
2024-01-16 20:31:28.604000+08:00 [notice] <0.235.0> Logging: switching to configured handler(s); following messages may not be visible in this log output
## ## RabbitMQ 3.12.12
## ##
########## Copyright (c) 2007-2023 Broadcom Inc and/or its subsidiaries
###### ##
########## Licensed under the MPL 2.0. Website: https://rabbitmq.com
Erlang: 26.2.1 [jit]
TLS Library: OpenSSL - OpenSSL 3.1.0 14 Mar 2023
Release series support status: supported
Doc guides: https://rabbitmq.com/documentation.html
Support: https://rabbitmq.com/contact.html
Tutorials: https://rabbitmq.com/getstarted.html
Monitoring: https://rabbitmq.com/monitoring.html
Logs: <stdout>
c:/Users/12061/AppData/Roaming/RabbitMQ/log/rabbit@zhangkai.log
Config file(s): c:/Users/12061/AppData/Roaming/RabbitMQ/advanced.config
Starting broker... completed with 3 plugins.
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
6. 测试
当服务启动后,浏览器访问http://127.0.0.1:15672/
登录进来之后就能看到这个页面了:
7. 添加rabbitmq到Windows的系统服务,方便设置开机启动
以管理员权限打开的终端才能执行下面的命令:
# 添加rabbitmq到Windows的系统服务
# 执行一次成功即可,不需要重复执行
rabbitmq-plugins enable rabbitmq_management
# 启动和关闭rabbitmq服务
net start rabbitmq
net stop rabbitmq
2
3
4
5
6
7
8
设置开机启动:
Python操作rabbitmq
1. 下载对应的模块
# 下载最新版本
pip install pika
# 我用的是1.3.2版本
pip install pika==1.3.2
2
3
4
5
2. 代码测试
你可以先运行消费者代码再运行生产者代码。
import pika
# 连接 RabbitMQ Server
credentials = pika.PlainCredentials('guest', 'guest') # RabbitMQ 用户名和密码
connection = pika.BlockingConnection(
pika.ConnectionParameters(
host='127.0.0.1',
port=5672,
virtual_host='/',
credentials=credentials)
)
# 消费者通过 channel 对象与 RabbitMQ Server 打交道
channel = connection.channel()
# 声明一个队列,如果该队列不存在就创建
channel.queue_declare(queue='news1')
# 回调函数
def callback(ch, method, properties, body):
"""
回调函数执行时,表示消费者已经从队列中拿到了消息,可以实现具体的逻辑
:param ch:
:param method:
:param properties:
:param body: bytes类型的消息
:return: None
"""
print(" [x] Received %r" % body.decode())
# 配置监听队列的相关参数
channel.basic_consume(
queue='news1', # 监听指定队列
auto_ack=True, # auto_ack:True 表示当消费者从队列中取出消息后,缓存中就不再保存该消息了
on_message_callback=callback # 当监听的队列有消息时调用回调函数执行具体逻辑
)
# 开始监听
channel.start_consuming()
"""
[x] Received '今日新到绿茶0位'
[x] Received '今日新到绿茶1位'
[x] Received '今日新到绿茶2位'
[x] Received '今日新到绿茶3位'
[x] Received '今日新到绿茶4位'
[x] Received '今日新到绿茶5位'
[x] Received '今日新到绿茶6位'
[x] Received '今日新到绿茶7位'
[x] Received '今日新到绿茶8位'
[x] Received '今日新到绿茶9位'
"""
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
51
52
53
54
55
import pika
# 连接 RabbitMQ Server
credentials = pika.PlainCredentials('guest', 'guest') # RabbitMQ 用户名和密码
connection = pika.BlockingConnection(
pika.ConnectionParameters(
host='127.0.0.1',
port=5672,
virtual_host='/',
credentials=credentials)
)
# 生产者通过 channel 对象与 RabbitMQ Server 打交道
channel = connection.channel()
# 声明一个队列,如果该队列不存在就创建
channel.queue_declare(queue='news1')
# 声明并配置交换机规则并路由到指定的队列,然后投递消息
for i in range(10):
channel.basic_publish(
exchange='', # 当 exchange 值为空时,使用默认的交换机模式
routing_key='news1', # 指定路由队列
body=f'今日新到绿茶{i}位'.encode('utf-8') # 投递消息
)
print(f'今日新到绿茶{i}位') # 测试使用,与主体逻辑无关
"""
今日新到绿茶0位
今日新到绿茶1位
今日新到绿茶2位
今日新到绿茶3位
今日新到绿茶4位
今日新到绿茶5位
今日新到绿茶6位
今日新到绿茶7位
今日新到绿茶8位
今日新到绿茶9位
"""
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
for docker
1. 拉取镜像
docker pull rabbitmq:management
# 注意,如果docker pull rabbitmq 后面不带management,启动rabbitmq后是无法打开管理界面的,所以我们要下载带management插件的rabbitmq
2
2. 启动镜像
docker run \
-d \
--name rabbitmq \
--hostname myrabbitmq \
--restart=always \
-e RABBITMQ_DEFAULT_USER=guest \
-e RABBITMQ_DEFAULT_PASS=12346 \
-v /data/rabbitmq_data:/var/lib/rabbitmq \
-p 5672:5672 \
-p 15672:15672 \
rabbitmq:management
2
3
4
5
6
7
8
9
10
11
其中:
-d
:后台运行容器。--name rabbitmq
:容器名。--hostname myrabbitmq
:主机名,RabbitMQ的一个重要注意事项是它根据所谓的 "节点名称"存储数据,默认为主机名。--restart=always
,表示将容器跟随docker服务重启而重启。-e
:指定环境变量:RABBITMQ_DEFAULT_USER
:默认用户名。RABBITMQ_DEFAULT_PASS
:默认密码。
-v
:挂在本地目录。-p
:指定映射端口:5672:5672
:应用访问端口。15672:15672
:web访问端口。
3. 连接
你如果下载的是带web插件版的,可以通过ip:15672
访问web页面:
也可以通过接口与其他语言进行通信,我这里及后续都通过Python与RabbitMQ通信,所以这里需要下载通信模块:
pip install pika==1.1.0
测试:
import pika
credentials = pika.PlainCredentials('guest', '12346') # mq用户名和密码
connection = pika.BlockingConnection(
pika.ConnectionParameters(
host='192.168.10.91',
port=5672,
virtual_host='/',
credentials=credentials)
)
2
3
4
5
6
7
8
9
10