一、什么是RabbitMQ
MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取或者订阅队列中的消息。MQ和JMS类似,但不同的是JMS是SUN JAVA消息中间件服务的一个标准和API定义,而MQ则是遵循了AMQP协议的具体实现和产品。
RabbitMQ是一个消息中间件,生产者生成消息,消费者消费消息,它遵循AMQP(高级消息队列协议),是最广泛部署的开源消息代理。
MQ术语:
broker:消息队列服务器实体。
exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
queue:消息队列,每个消息都会被投入到一个或多个队列。
binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
routing Key:路由关键字,exchange根据这个关键字进行消息投递。
vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
producer:消息生产者,就是投递消息的程序。
consumer:消息消费者,就是接受消息的程序。
channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。
MQ工作流:
(1)客户端连接到消息队列服务器broker,打开一个channel。
(2)客户端声明一个exchange,并设置相关属性。
(3)客户端声明一个queue,并设置相关属性。
(4)客户端使用routing key,在exchange和queue之间建立好绑定关系。
(5)客户端投递消息到exchange。
(6)exchange接收到消息后,就根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里。
二、安装RabbitMQ
由于RabbitMQ是基于erlang的,所以,在正式安装RabbitMQ之前,需要先安装一下erlang。
RabbitMQ Erlang Version对应关系详见:https://www.rabbitmq.com/which-erlang.html#intro
1、下载 并安装erlang
下载地址 :https://www.erlang.org/downloads
我们选择OTP 23.0
根据自己的系统选择下载,我这里选择的是64位的安装包
安装过程很简单,一路Next就可以了
2、下载并安装 RabbitMQ
进入官网下载 https://www.rabbitmq.com/download.html
在下载页面找到Windows Installs
下载安装成后,开始安装,一路Next即可
三、启动RabbitMQ
1、运行CMD,进入安装目录下的sbin文件夹下
2、通过命令打开可视化GUI界面
在命令行运行:
rabbitmq-plugins enable rabbitmq_management
执行成功后会显示如下信息:
执行成功之后,就能在开始菜单中找到他了。
打开浏览器,进行RabbitMQ管理后台:http://localhost:15672/
默认帐号和密码为:guest
四、关闭RabbitMQ
以管理员模式打开CMD,执行
rabbitmqctl stop
即可
五、RabbitMQ常用命令
服务启动关闭:
#启动服务
rabbitmq-server-detached
#关闭服务
rabbitmqctl stop
用户管理:
#添加用户
rabbitmqctl add_user username password
#删除用户
rabbitmqctl delete_user username
#修改用户密码
rabbitmqctl change_password username password
#查看当前用户
rabbitmqctl list_users
#设置用户角色
rabbitmqctl set_user_tags username tag # tag分为:administrator, monitoring, management, policymaker
插件管理:
#开启插件
rabbitmq-plugins enable plugin_name
#关闭插件
rabbitmq-plugins disable plugin_name
#查看插件状态
rabbitmq-plugins list
集群配置:
#加入node到集群
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit_cluster_name
#查看集群状态
rabbitmqctl cluster_status
#从当前集群剔除节点
rabbitmqctl forget_cluster_node rabbit_node_name
vhost管理:
#添加vhost
rabbitmqctl add vhost vhost_name
#删除vhost
rabbitmqctl delete vhost vhost_name
权限管理:
#配置用户vhost的权限
rabbitmqctl set_permissions [-p vhostpath] {user} {conf} {write} {read}
conf:一个正则表达式match哪些配置资源能够被该用户访问。
write:一个正则表达式match哪些配置资源能够被该用户读。
read:一个正则表达式match哪些配置资源能够被该用户访问。
#查看指定vhost的用户权限
rabbitmqctl list_permissions [-p vhostPath]
#查看指定用户的权限
rabbitmqctl list_user_permissions username
#删除用户的权限
rabbitmqctl clear_permissions [-p vhostPath] {username}
节点管理:
#设置节点为磁盘模式
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type disc
rabbitmqctl start_app
#设置节点为内存模式
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type ram
rabbitmqctl start_app
镜像队列配置:
rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]
-p Vhost: 可选参数,针对指定vhost下的queue进行设置
Name: 策略名称
Pattern: queue的匹配模式(正则表达式)
Definition: 镜像定义,包括三个部分 ha-mode,ha-params,ha-sync-mode
ha-mode: 指明镜像队列的模式,有效值为 all/exactly/nodes
all表示在集群所有的节点上进行镜像
exactly表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
nodes表示在指定的节点上进行镜像,节点名称通过ha-params指定
ha-params: ha-mode模式需要用到的参数
ha-sync-mode: 镜像队列中消息的同步方式,有效值为automatic,manually
Priority: 可选参数, policy的优先级
例如,对队列名称以hello开头的所有队列进行镜像,并在集群的两个节点上完成镜像,policy的设置命令为:
rabbitmqctl set_policy hello-ha "^hello" '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'
服务器状态:rabbitmqctl status
队列信息: rabbitmqctl list_queues [-p vhostpath] [queueinfoitem] queueinfoitem分为: name, durable, auto_delete, arguments, messages_ready, messages_unacknowled, messages, consumers, memory.