前言
本篇文章主要用于记录个人学习RabbitMQ的过程,记录下来方便日后查看,如有错误的地方,还望指正。
本篇文章比较详细地记录本人在学习过程中的每一个步骤,比较适合对RabbitMQ不熟的同学学习,跟着本文操作一遍,就可以大概知道RabbitMQ的基础知识了。
准备阶段
首先把RabbitMQ环境安装好,下面再详细介绍RabbitMQ各个知识点和如何使用。
由于是基于Centos7的操作系统安装RabbitMQ-3.7.7。
为了方便操作,先把防火墙干掉,生产环境当然不能这么干,个人学习随意,以下是相关命令:
centos7关闭并禁止防火墙启动命令:
systemctl stop firewalld
systemctl disable firewalld
RabbitMQ安装
这里介绍一种比较简单的安装方法-依赖安装,不用单独安装erlang等依赖。
首先到RabbitMQ官网下载:http://www.rabbitmq.com/download.html,
选择合适你的操作系统版本,本人的操作系统是Centos7.5,所以选择RHEL/CentOS 7.x这个。
把下载好的rabbitmq-server-3.7.7-1.el7.noarch.rpm放到/home目录,由于RabbitMQ-3.7.7需要安装比较新的erlang-v19.3以上,而yum上并没有这么高的版本,所以需要在/etc/yum.repos.d/目录下创建文件rabbitmq-erlang.repo,命令如下:
cd /etc/yum.repos.d/
touch rabbitmq-erlang.repo
编辑rabbitmq-erlang.repo命令如下:
vi rabbitmq-erlang.repo
添加以下内容到rabbitmq-erlang.repo:
[rabbitmq-erlang]
name=rabbitmq-erlang
baseurl=https://dl.bintray.com/rabbitmq/rpm/erlang/21/el/7/
gpgcheck=1
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
repo_gpgcheck=0
enabled=1
上面baseurl是指向erlang-v21版本的链接。
cd到/home目录,执行安装RabbitMQ的命令:
yum install -y rabbitmq-server-3.7.7-1.el7.noarch.rpm
这个过程会下载安装依赖的erlang等依赖,等待安装完成,会出现下面的界面,则说明RabbitMQ就已经安装完成了。
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : erlang-21.0.5-1.el7.centos.x86_64 1/3
正在安装 : socat-1.7.3.2-2.el7.x86_64 2/3
正在安装 : rabbitmq-server-3.7.7-1.el7.noarch 3/3
验证中 : socat-1.7.3.2-2.el7.x86_64 1/3
验证中 : rabbitmq-server-3.7.7-1.el7.noarch 2/3
验证中 : erlang-21.0.5-1.el7.centos.x86_64 3/3
已安装:
rabbitmq-server.noarch 0:3.7.7-1.el7
作为依赖被安装:
erlang.x86_64 0:21.0.5-1.el7.centos socat.x86_64 0:1.7.3.2-2.el7
完毕!
RabbitMQ设置
启动RabbitMQ服务:
service rabbitmq-server start
刚安装好的RabbitMQ是还没有用户的,也不能访问RabbitMQ的web管理后台,接下来先添加一个叫root的用户:
rabbitmqctl add_user root root
rabbitmqctl set_user_tags root administrator
rabbitmqctl set_permissions -p / root "." "." ".*"
#更多命令查看:rabbitmqctl --help
启用web访问权限:
rabbitmq-plugins enable rabbitmq_management
重启RabbitMQ服务:
service rabbitmq-server restart
然后在浏览器输入:http://ip:15672/ ,这时可以看到RabbitMQ管理页面了,输入刚刚添加的账号root,密码root即可进入。
登录进去后界面如下:
RabbitMQ是基于Virtual Host来进行权限控制的,现在为我们刚刚添加的root用户添加一个Virtual Host,在RabbitMQ的web管理后台,根据下图进行添加一个virtual host,添加成功后默认分配给root用户了。
RabbitMQ简介
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种语言平台的客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
通常我们谈到消息队列, 会有三个概念: 消息生产者(Provider)、队列(Queue)、消息消费者(Consumer),RabbitMQ 在这个基本概念上, 多做了一层抽象, 在消息生产者和队列之间, 加入了交换器 (Exchange)。这样消息生产者和队列就没有直接联系, 变成消息生产者把消息发送给交换器, 交换器根据调度策略再把消息发送给队列。
- 左侧P代表消息生产者,也就是往RabbitMQ发消息的程序。
- 中间即是RabbitMQ,其中包括交换机(Exchange)和队列(Queue)。
- 右侧C代表消费者,也就是往RabbitMQ拿消息的程序。
其中比较重要的概念有:虚拟主机(Virtual Host)、交换机(Exchange)、队列(Queue)、绑定(Binding)。
虚拟主机(Virtual Hosts)
在上面已经说明如何为一个用户创建一个Virtual Host,一个虚拟主机持有一组交换机、队列和绑定。在RabbitMQ当中,用户只能在虚拟主机这个粒度上进行权限的控制。 如果需要禁止A组访问B组的交换机/队列/绑定,必须为A和B分别创建一个虚拟主机。每一个RabbitMQ服务器都有一个默认的虚拟主机“/”。
交换机(Exchange)
交换机的功能主要是接收消息并且根据转发策略转发到对应的队列,交换机不存储消息,在启用ack模式后,交换机找不到队列会返回错误,这个ack模式后面再详细讨论。交换机有四种类型:Direct, topic, Headers and Fanout
队列(Queue)
队列用于存放消息的载体,一般是和交换机进行绑定,交换机根据转发策略把消息转发到队列里。
绑定(Binding)
也就是交换机需要和队列相绑定,这其中如上图所示,是多对多的关系。
交换机类型介绍
Direct Exch