RabbitMQ - RabbitMQ简介,应用

Posted MinggeQingchun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RabbitMQ - RabbitMQ简介,应用相关的知识,希望对你有一定的参考价值。

一、消息队列(Message Queue,MQ)

消息(Message)是指在应用间传送的数据。

消息队列(Message Queue,简称MQ)是一种应用程序对应用程序的通信方法。

因为是队列,所以遵循FIFO 先进先出的原则,它是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务

消息队列主要解决应用耦合异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。

为何使用MQ?

1、流量削峰:解决高并发问题

如秒杀活动,可能会在短时间内产生大量请求同时打服务端,如果后端对每个请求都进行数据库读写操作,定会造成服务器压力过大,产生服务异常甚至不可用。我们可以通过使用MQ实现流量缓冲,将所有请求先放入消息队列中,服务端每次处理业务先从消息队列获取,从而实现流量削峰,解决高并发问题。

2、应用解耦:提升系统可用性

如电商应用中有订单系统、库存系统、物流系统、支付系统,当用户创建订单后,先后调用库存系统、物流系统、支付系统,任何一个子系统出了故障,都会造成下单失败。引入消息队列后,系统间耦合调用的问题会减少,任何一个子系统出现故障都不会影响用户下单,子系统故障恢复后,会继续处理消息,提升系统可用性。

3、异步处理:提升响应速度

当用户在客户端提交了一个同步请求,后端处理需要耗时很久才能响应,这对用户体验来说无疑是致命的。如果说用户并不关心请求是否处理完成,对于一些耗时的非事务性的业务处理,可以使用消息队列异步请求的方式,将请求信息放入消息队列,直接返回客户端响应,后端监听队列自行处理,提升响应速度。

目前主流的 MQ KafkaRabbitMQRocketMQActiveMQ
选型根据需求(数据量大的选RokectMQ(基于JMS)、Kafka,轻微使用RabbitMQ(基于AMQP))

二、RabbitMQ

RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQPAdvanced Message Queue,高级消息队列协议)协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、 安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。

1、RabbitMQ安装

一般来说安装 RabbitMQ 之前要安装 Erlang

Erlang官方下载地址:Downloads - Erlang/OTP

RabbitMQ官方下载地址:Downloading and Installing RabbitMQ — RabbitMQ 

1、安装RabbitMQ之前必须要先安装所需要的依赖包,使用下面的一次性安装命令

yum install gcc glibc-devel make ncurses-devel openssl-devel xmlto -y

2、安装Erlang

(1)将Erlang源代码包otp_src_xx.xx.tar.gz上传到Linux的 /etc/software 目录下(这个目录自定义,博主选择的/etc/software)

(2)解压erlang 源码包

tar -zxvf otp_src_xx.xx.tar.gz -C /opt/software

(3)手动创建erlang 的安装目录

mkdir /usr/local/erlang

(4)进入erlang的解压目录

cd otp_src_xx.xx

(5)配置erlang的安装信息

  ./configure --prefix=/usr/local/erlang --without-javac

(6)编译并安装

make && make install

(7)配置环境变量

vim /etc/profile

(8)将这些配置填写到profile文件的最后

ERL_HOME=/usr/local/erlang

PATH=$ERL_HOME/bin:$PATH

export ERL_HOME PATH

(9)启动环境变量配置文件

source /etc/profile

3、安装RabbitMQ

(1)将RabbitMQ安装包rabbitmq-server-xx.xx.xx-xx.el7.noarch.rpm上传到 /opt/software 目录

(2)安装RabbitMQ

rpm -ivh --nodeps rabbitmq-server-xx.xx.xx-xx.el7.noarch.rpm

4、RabbitMQ命令

(1)启动RabbitMQ

rabbitmq-server start &

注:这里可能会出现错误,错误原因是 /var/lib/rabbitmq/.erlang.cookie 文件权限不够

解决方案:

对这个文件授权  

chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie

chmod 400 /var/lib/rabbitmq/.erlang.cookie

(2)停止服务

rabbitmqctl stop

5、插件管理

(1)添加插件

rabbitmq-plugins enable 插件名

(2)删除插件

rabbitmq-plugins disable 插件名

注:RabbitMQ启动以后可以使用浏览器进入管控台但是默认情况RabbitMQ不允许直接使用浏览器浏览器进行访问因此必须添加插件

 rabbitmq-plugins enable rabbitmq_management

(3)使用浏览器访问管控台http://RabbitMQ服务器IP:15672

http://192.168.133.128:15672  界面如下

 6、用户管理

RabbitMQ安装成功后使用默认用户名guest登录

账号:guest

密码:guest

注意:这里guest只允许本机登录访问,需要创建用户并授权远程访问命令如下

(1)添加用户:

rabbitmqctl add_user username password

 rabbitmqctl add_user root root

(2)删除用户:

rabbitmqctl delete_user username

(3)修改密码:

rabbitmqctl change_password username newpassword

rabbitmqctl change_password root 123456

(4)设置用户角色:

rabbitmqctl set_user_tags username tag

rabbitmqctl set_user_tags root administrator

tag参数表示用户角色取值为:management monitoring policymaker  administrator

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

7、 权限管理

(1)授权命令:

rabbitmqctl set_permissions [-p vhostpath] user conf write read

-p vhostpath :用于指定一个资源的命名空间,例如 –p / 表示根路径命名空间

user:用于指定要为哪个用户授权填写用户名

     conf:一个正则表达式match哪些配置资源能够被该用户配置。
       write:一个正则表达式match哪些配置资源能够被该用户读。
       read:一个正则表达式match哪些配置资源能够被该用户访问。

如:

rabbitmqctl set_permissions -p / root '.*' '.*' '.*'

用于设置root用户拥有对所有资源的 读写配置权限

(2)查看用户权限 

rabbitmqctl  list_permissions [vhostpath]

如  

查看根径经下的所有用户权限

  rabbitmqctl  list_permissions

  查看指定命名空间下的所有用户权限

  rabbitmqctl  list_permissions /abc

(3)查看指定用户下的权限

rabbitmqctl  list_user_permissions username

查看root用户下的权限

rabbitmqctl  list_user_permissions root

(4)清除用户权限

rabbitmqctl  clear_permissions username

如:

清除root用户的权限

rabbitmqctl  clear_permissions root

8、vhost管理

vhost是RabbitMQ中的一个命名空间,可以限制消息的存放位置利用这个命名空间可以进行权限的控制有点类似Windows中的文件夹一样,在不同的文件夹中存放不同的文件。

1、添加vhost:

rabbitmqctl add vhost name

如

  rabbitmqctl add vhost myhost

2、删除vhost:

rabbitmqctl delete vhost name

   如

    rabbitmqctl delete vhost myhost

以上是关于RabbitMQ - RabbitMQ简介,应用的主要内容,如果未能解决你的问题,请参考以下文章

Rabbitmq入门

RabbitMQ - RabbitMQ简介,应用

RabbitMQ——简介

RabbitMQ简介

RabbitMQ简介

.NET 使用 RabbitMQ 图文简介