Linux下安装RabbitMQ

在开始之前一定要看官方文档,其实教程不一定最新的,所以一定要try it.
文章参考作者https://www.jianshu.com/p/7e2e3b25fccf和https://www.linuxidc.com/Linux/2015-09/123238.htm

安装Erlang

RabbitMQ的安装需要Erlang的基础环境,必须按照RabbitMQ Erlang版本要求进行安装。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

关于Erlang官方的安装方式有三种:

个人是按照Erlang Solutions的方式安装;根据个人的Linux系统情况选择如下:

  Linux系统中RabbitMQ安装使用 随笔 第1张 image

 

基本命令如下:

cd /usr/local/src/  
mkdir rabbitmq  
cd rabbitmq  

//下载rpm,如果下载速度慢可以本地下载上传Linux中也可 wget https://packages.erlang-solutions.com/erlang/esl-erlang/FLAVOUR_1_general/esl-erlang_19.3-1~centos~6_i386.rpm rpm –import http://packages.erlang-solutions.com/rpm/erlang_solutions.asc //导入公钥 yum install esl-erlang_19.3-1~centos~6_i386.rpm //安装自动更新依赖(不建议使用rpm安装) erl //验证是否安装成功 
  Linux系统中RabbitMQ安装使用 随笔 第2张 安装成果测试

安装rabbitmq

所有的安装版本都在这里了,可以自行根据自己的要求选择安装即可。

  Linux系统中RabbitMQ安装使用 随笔 第3张 版本说明

 

//下载 wget https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.6.6/rabbitmq-server-3.6.6-1.el6.noarch.rpm //安装 rpm -ivh --nodeps rabbitmq-server-3.6.6-1.el6.noarch.rpm 

chkconfig rabbitmq-server on

注意事项:

1、如果出现如下错误,但是的确安装了erlang对应版本:

error: Failed dependencies:
    erlang >= R16B-03 is needed by rabbitmq-server-3.6.3-1.noarch 

解决方式:

添加--nodeps你的rpm命令,参考连接:StackOverflow问答

rpm -ivh --nodeps rabbitmq-server-3.5.7-1.noarch.rpm 

检查https://stackoverflow.com/a/40218299/877813,并添加--nodeps你的rpm命令

2、出现如下错误的情况;说缺少socat依赖

 socat is needed by rabbitmq-server-3.6.6-1.el6.noarch 

解决方式:参考博客

yum -y install socat
此时会报错没有socat包或是找不到socat包,解决方法安装centos的epel的扩展源
yum -y install epel-release
之后执行yum -y install socat

启动和配置

1.常用命令:

//常用的rabbitmq的命令 service rabbitmq-server start service rabbitmq-server stop service rabbitmq-server status service rabbitmq-server rotate-logs| service rabbitmq-server restart service rabbitmq-server condrestart service rabbitmq-server try-restart service rabbitmq-server reload service rabbitmq-server force-reload ps -ef | grep rabbitmq 查看rabbitMq进程 netstat -anplt | grep LISTEN rabbitmq默认监听端口15672/5672 

2、基本配置:

//开启管理页面插件
rabbitmq-plugins enable rabbitmq_management 

管理插件安装完成后,出现如下提示,表示安装成。

The following plugins have been enabled:
  mochiweb
  webmachine
  rabbitmq_web_dispatch
  amqp_client
  rabbitmq_management_agent
  rabbitmq_management
Plugin configuration has changed. Restart RabbitMQ for changes to take effect. 

可以用浏览器输入localhost:15672,账号密码全输入guest即可登录:

  Linux系统中RabbitMQ安装使用 随笔 第4张

补充说明部分:

  guest账户只是用户体验也只能在本地使用,所以我们需要创建新的用户

RabbitMQ的用户角色分类:
none、management、policymaker、monitoring、administrator

RabbitMQ各类角色描述:
none
不能访问 management plugin

management

用户可以通过AMQP做的任何事外加:
列出自己可以通过AMQP登入的virtual hosts  
查看自己的virtual hosts中的queues, exchanges 和 bindings
查看和关闭自己的channels 和 connections
查看有关自己的virtual hosts的“全局”的统计信息,包含其他用户在这些virtual hosts中的活动。

policymaker 
management可以做的任何事外加:
查看、创建和删除自己的virtual hosts所属的policies和parameters

monitoring  
management可以做的任何事外加:
列出所有virtual hosts,包括他们不能登录的virtual hosts
查看其他用户的connections和channels
查看节点级别的数据如clustering和memory使用情况
查看真正的关于所有virtual hosts的全局的统计信息

administrator   
policymaker和monitoring可以做的任何事外加:
创建和删除virtual hosts
查看、创建和删除users
查看创建和删除permissions
关闭其他用户的connections

创建用户并设置角色:
可以创建管理员用户,负责整个MQ的运维,例如: 

  1. $sudo rabbitmqctl add_user  user_admin  passwd_admin 

赋予其administrator角色:

  1. $sudo rabbitmqctl set_user_tags user_admin administrator 


可以创建RabbitMQ监控用户,负责整个MQ的监控,例如: 

  1. $sudo rabbitmqctl add_user  user_monitoring  passwd_monitor 

赋予其monitoring角色: 

  1. $sudo rabbitmqctl set_user_tags user_monitoring monitoring 

可以创建某个项目的专用用户,只能访问项目自己的virtual hosts 

  1. $sudo rabbitmqctl  add_user  user_proj  passwd_proj 

赋予其monitoring角色: 

  1. $sudo rabbitmqctl set_user_tags user_proj management 

创建和赋角色完成后查看并确认: 

  1. $sudo rabbitmqctl list_users 

########################
#RabbitMQ 权限控制:
########################
默认virtual host:"/"
默认用户:guest 
guest具有"/"上的全部权限,仅能有localhost访问RabbitMQ包括Plugin,建议删除或更改密码。可通过将配置文件中loopback_users置孔来取消其本地访问的限制:
[{rabbit, [{loopback_users, []}]}]

用户仅能对其所能访问的virtual hosts中的资源进行操作。这里的资源指的是virtual hosts中的exchanges、queues等,操作包括对资源进行配置、写、读。配置权限可创建、删除、资源并修改资源的行为,写权限可向资源发送消息,读权限从资源获取消息。比如:
exchange和queue的declare与delete分别需要exchange和queue上的配置权限
exchange的bind与unbind需要exchange的读写权限
queue的bind与unbind需要queue写权限exchange的读权限
发消息(publish)需exchange的写权限
获取或清除(get、consume、purge)消息需queue的读权限

对何种资源具有配置、写、读的权限通过正则表达式来匹配,具体命令如下:
set_permissions [-p <vhostpath>] <user> <conf> <write> <read>
其中,<conf> <write> <read>的位置分别用正则表达式来匹配特定的资源,如'^(amq\.gen.*|amq\.default)$'可以匹配server生成的和默认的exchange,'^$'不匹配任何资源

需要注意的是RabbitMQ会缓存每个connection或channel的权限验证结果、因此权限发生变化后需要重连才能生效。

为用户赋权: 

  1. $sudo rabbitmqctl  set_permissions -p /vhost1  user_admin '.*' '.*' '.*' 

该命令使用户user_admin具有/vhost1这个virtual host中所有资源的配置、写、读权限以便管理其中的资源

查看权限:

$sudo rabbitmqctl list_user_permissions user_admin  
Listing permissions for user "user_admin" ...  
/vhost1 .* .* .*  
  
$sudo rabbitmqctl list_permissions -p /vhost1  
Listing permissions in vhost "/vhost1" ...  
user_admin  .* .* .* 

参考文档





扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄