rabbitMQ
RabbitMQ是流行的开源消息队列系统,是AMQP(Advanced Message Queuing
Protocol高级消息队列协议)的标准实现,用erlang语言开发。RabbitMQ据说具有良好的性能和时效性,同时还能够非常好的支持集群和负载部署,非常适合在较大规模的分布式系统中使用
当消息进入A节点的Queue中后,consumer从B节点拉取时,RabbitMQ会临时在A、B间进行消息传输,把A中的消息实体取出并经过B发送给consumer。
所以consumer应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理Queue。否则无论consumer连A或B,出口总在A,会产生瓶颈。该模式存在一个问题就是当A节点故障后,B节点无法取到A节点中还未消费的消息实体。如果做了消息持久化,那么得等A节点恢复,然后才可被消费;如果没有持久化的话,队列数据就丢失了。
安装
第一种方式安装,3.6.6版本
1.由于RabbitMQ
依赖Erlang
, 所以需要先安装Erlang
$ wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
$ sudo rpm -ivh erlang-solutions-1.0-1.noarch.rpm
$ sudo yum install erlang
2.完成后安装RabbitMQ
先下载rpm
包,然后yum
安装
$ wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.6/rabbitmq-server-3.6.6-1.el7.noarch.rpm
$ sudo yum install rabbitmq-server-3.6.6-1.el7.noarch.rpm
3.安装时如果遇到下面的依赖错误
Error: Package: socat-1.7.2.3-1.el6.x86_64 (epel)
Requires: libreadline.so.5()(64bit)
可以尝试先执行
$ sudo yum install socat
第二种方式安装,3.78版本
1.下载rlang和rabbitmq
$ wget https://zysd-shanghai.oss-cn-shanghai.aliyuncs.com/software/linux/erlang/erlang-21.1-1.el7.centos.x86_64.rpm
$ wget https://zysd-shanghai.oss-cn-shanghai.aliyuncs.com/software/linux/rabbitmq/rabbitmq-server-3.7.8-1.el7.noarch.rpm
2.安装Erlang
$ rpm -ivh erlang-21.1-1.el7.centos.x86_64.rpm
3.安装RabbitMQ
$ rpm -ivh rabbitmq-server-3.7.8-1.el7.noarch.rpm
安装RabbitMQ时如果遇到下面的依赖错误,先执行
$ sudo yum install socat
基本命令
$ sudo chkconfig rabbitmq-server on # 添加开机启动RabbitMQ服务
$ sudo /sbin/service rabbitmq-server start # 启动服务
$ sudo /sbin/service rabbitmq-server status # 查看服务状态
$ sudo /sbin/service rabbitmq-server stop # 停止服务
用户配置
# 查看当前所有用户
$ sudo rabbitmqctl list_users
# 查看默认guest用户的权限
$ sudo rabbitmqctl list_user_permissions guest
# 由于RabbitMQ默认的账号用户名和密码都是guest。为了安全起见, 先删掉默认用户
$ sudo rabbitmqctl delete_user guest
# 添加新用户
$ sudo rabbitmqctl add_user username password
# 设置用户tag
$ sudo rabbitmqctl set_user_tags username administrator
# 赋予用户默认vhost的全部操作权限
$ sudo rabbitmqctl set_permissions -p / username ".*" ".*" ".*"
# 查看用户的权限
$ sudo rabbitmqctl list_user_permissions username
web管理接口
如果只从命令行操作RabbitMQ
,多少有点不方便。RabbitMQ
自带了web
管理界面,只需要启动插件便可以使用。然后通过浏览器访问 [http://localhost:15672]
输入用户名和密码访问web
管理界面
$ sudo rabbitmq-plugins enable rabbitmq_management
开启用户远程访问
默认情况下,RabbitMQ
的默认的guest
用户只允许本机访问, 如果想让guest
用户能够远程访问的话,只需要将配置文件中的loopback_users
列表置为空即可,如下:
{loopback_users, []}
另外关于新添加的用户,直接就可以从远程访问的,如果想让新添加的用户只能本地访问,可以将用户名添加到上面的列表, 如只允许admin
用户本机访问。
{loopback_users, ["admin"]}
用户角色分类
none、management、policymaker、monitoring、administrator
1.none
不能访问 management plugin
2.management
用户可以通过AMQP做的任何事外加:
列出自己可以通过AMQP登入的virtual hosts
查看自己的virtual hosts中的queues, exchanges 和 bindings
查看和关闭自己的channels 和 connections
查看有关自己的virtual hosts的“全局”的统计信息,包含其他用户在这些virtual hosts中的活动。
3.policymaker
management可以做的任何事外加:
查看、创建和删除自己的virtual hosts所属的policies和parameters
4.monitoring
management可以做的任何事外加:
列出所有virtual hosts,包括他们不能登录的virtual hosts
查看其他用户的connections和channels
查看节点级别的数据如clustering和memory使用情况
查看真正的关于所有virtual hosts的全局的统计信息
5.administrator
policymaker和monitoring可以做的任何事
dockr部署
1.拉取RabbitMQ镜像文件,这里加上了management
,表明是带web
管理界面的,便于管理
docker pull rabbitmq:management
2.创建并启动容器,并将本地15672
映射到8080
端口
docker run -d --hostname my-rabbit --name rabbit -p 8080:15672 rabbitmq:management
参数说明
- --hostname:指定容器主机名称
- --name: 指定容器名称
- -p: 将mq端口号映射到本地
3.查看rabbitmq
运行状况
docker logs rabbit