本文已参与「新人创作礼」活动,一起开启掘金创作之路。
前言
近期要实现一个图片异步上传的需求,需要用到RabbitMQ,辅助客户端完成对高并发请求的处理。
一、安装Erlang
-
由于RabbitMQ服务器是用Erlang语言编写,所以我们需要先安装Erlang环境,本文使用的版本是erl-24.1
-
下载地址: github.com/erlang/otp/…
-
下载完成后,双击exe完成安装。记录安装目录,默认路径:C:\Program Files\erl-24.1
-
配置环境变量 路径:计算机--右键--属性--高级系统设置--环境变量--系统变量 step 1 新建: 变量名:ERLANG_HOME 变量值:C:\Program Files\erl-24.1
step 2 在系统变量栏找到Path 新建值%ERLANG_HOME%\bin
-
检测安装状态 Win+R输入cmd,打开命令提示符,输入erl,如下,Erlang安装结束。
二、安装RabbitMQ
- 本文使用的版本为rabbitmq-server-windows-3.9.8 下载地址:github.com/rabbitmq/ra…
- 解压到任意目录下,本文解压地址是 C:\Program Files
- 配置环境变量
方式同上,在系统变量栏
step 1 新建:
变量名:RABBITMQ_SERVER
变量值:C:\Program Files\rabbitmq_server-3.9.8
step 2 在系统变量栏找到Path
新建值%RABBITMQ_SERVER%\sbin
- 安装页面管理工具
4.1 CMD命令进入sbin目录, 或直接在该目录内Shift+右键-->在此处打开命令窗口
4.2 输入 rabbitmq-plugins.bat enable rabbitmq_management
- 启动服务
命令窗输入rabbitmq-server.bat,或直接双节打开rabbitmq-server.bat
- 测试
浏览器输入 http://localhost:15672/ ,username和password都输入 guest,登录。
三、配置账户
默认情况下,如果只有guest账户,RabbitMQ是不允许用户通过远程ip访问管理页面的。因此需要配置自定义账户,才能通过远程方式(即IP+端口号)访问RabbitMQ。
- 在Admin栏右侧,点击Virtual Host新增virtual host(虚拟消息服务器)。每个VirtualHost相当于一个相对独立的RabbitMQ服务器;每个VirtualHost之间相互隔离,互不干扰。
- 在Admin栏右侧,点击User新增用户,(新创建的用户默认是没有任何权限的)
- 为新增账号添加权限,点击新增的用户名即可编辑权限
此处权限设置,表明该用户具有访问列表中virtual host的权限
- 分配权限后,guest账户就不再需要了,删除即可,点击guest用户名
- 删除guest后,RabbitMQ会检测到当前guest账户登录失效,有弹窗提示输入账号密码,填入新创建的账号信息即可,然后退出guest账号
- 远程访问,并用新账号登录
- 如果登录失败可以尝试以下方案
方案一:将新增账户类型设置为Administrator,CMD命令,在sbin目录下输入
rabbitmqctl set_user_tags admin administrator
设置后重试登录。(admin为刚才新增的账户名) 方案二:为新增账户添加默认virtual host的权限 rabbitmqctl set_permissions -p / admin '.' '.' '.*' 设置后重试登录。(/ 为默认virtual host, admin为新增账号) 方案三:新建账号,并为其分配权限 rabbitmqctl add_user guest1 123456 (账号guest1 密码123456) rabbitmqctl set_user_tags guest1 administrator (设置账号类型为administrator) rabbitmqctl set_permissions -p / guest1 '.' '.' '.*' (为guest1添加权限) 设置后使用guest1重试登录。
四、配置队列
- 创建队列
Virtual host :当前队列输入那个消息服务器
Type:队列类型默认选择Classic(经典款)
Name:队列名
Durability:Durable(默认,持久化),另一个是Transient,瞬态。持久化消息存储在磁盘,瞬态消息存储在内存中,大部分情况都选择持久化消息方式存储
Auto delete:No,关闭队列自动删除。否则当至少有一个消费者连接到队列时,该队列将删除自身,并将所有消费者的连接断开。(有点像滴滴司机抢单)
Arguments:参考网上其他博主的讲解,不在过多阐述
--------------------------------------------------------------------以下操作非必要--------------------------------------------------------------- 感兴趣可以先了解一下RabbitMQ中 exchange、route、queue的关系
- 创建Exchanges,这里Type选择direct,要求routing key必须完全一致才能访问队列,其他都能网上查到,不再赘述
4. 配置自定义的Exchange,配置好后可以通过点击队列名,查看Binds情况