目标:
了解消息中间件 — RabbitMQ
学习步骤:
1、MQ相关概念2、消息队列应用场景
3、RabbitMQ相关原理
4、安装RabbitMQ
一、MQ相关概念
1、先明白什么是队列,它是一个存储、组织数据的数据结构,其最大的特性就是FIFO
RabbitMQ中queue是RabbitMQ的内部对象,用于存储消息
2、MQ是什么?
消息队列(Message queue)
消息队列是在消息的传输过程中保存消息的容器,用于接收消息并以文件的方式存储,一个消息队列可以被一个也可以被多个消费者消费,服务之间最常见的通信方式是直接调用彼此来通信
- 消息从一端发出后立即就可以达到另一端,称为即时消息通讯(同步通信)
- 消息从某一端发出后,首先进入一个容器进行临时存储,当达到某种条件后,再由这个容器发送给另一端,称为延迟消息通讯 (异步通信)
3、RabbitMQ是什么?
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。
AMQP 的主要特征是面向消息、队列、路由、可靠性、安全。AMQP 协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次
说白了就是负责 接收与转发消息数据
RabbitMQ服务器是用Erlang语言编写的
中间件嘛,加一层呐?
二、消息队列应用场景
应用解耦 :
异步处理 :
流量削锋 :
日志处理 :
消息通讯 :
消息广播 :
三、RabbitMQ相关原理
AMQP 协议模型由三部分组成:生产者、消费者和服务端,执行流程如下:
生产者是连接到 Server,建立一个连接,开启一个信道。
生产者声明交换器和队列,设置相关属性,并通过路由键将交换器和队列进行绑定。
消费者也需要进行建立连接,开启信道等操作,便于接收消息。
生产者发送消息,发送到服务端中的虚拟主机。
虚拟主机中的交换器根据路由键选择路由规则,发送到不同的消息队列中。
订阅了消息队列的消费者就可以获取到消息,进行消费。
1、Producer:数据的发送方(生产者),负责产生和发送消息到 Broker
2、Connection就是一个TCP的连接,Producer和Consumer都是通过TCP连接到RabbitMQ Server的
Channel是建立在上述的TCP连接中,因为建立TCP Connection的开销将是巨大的,所以其是为了节省rabbitmq开销
Channel是我们与RabbitMQ打交道的最重要的一个接口,我们大部分的业务操作是在Channel这个接口中完成的,包括定义Queue、定义Exchange、绑定Queue与Exchange、发布消息等
3、Broker: 即RabbitMQ Server
消息处理中心,负责消息存储、确认、重试等,一般其中会包含多个 Queue
作用是维护一条从Producer到Consumer的路线,保证数据能够按照指定的方式进行传输
Exchange:即rabbitmq内的消息交换器
message到达 broker的第一站,根据分发规则,匹配查询表中的routing key,分发消息到queue中去,常用的类型有:direct(point-to-point),topic(publish-subscribe)and fanout(multicast)。
Queue:即队列,是rabbitmq内部对象,用于存储消息;
Binding:Exchange和queue之间的虚拟连接,binding 中可以包含 routing key,Binding 信息被保存在 exchange的查询表里,用于message的分发依据。
4、Consumer:即数据的接收方,负责从 Broker 中获取消息,并进行相应处理
四、安装和配置RabbitMQ
1、安装 rabbitMQ前先安装Erlang,先查看 对应适配版本
https://www.rabbitmq.com/which-erlang.html
去Erlang官网顺下来
https://www.erlang.org/downloads
https://www.rabbitmq.com/
至此,两个东西已经顺下来了
传到 远程上后,进行解压安装
# tar -zxvf otp_src_25.1.2.tar.gz //解压Erlang
# xz -d rabbitmq-server-generic-unix-3.11.2.tar.xz //解压RabbitMQ
# tar -xvf rabbitmq-server-generic-unix-3.11.2.tar
创建我们的目录并移动文件
[root@iZwz99vgpeg038we3lyfj7Z csnz]# mkdir -p /usr/local/software/rabittmq
[root@iZwz99vgpeg038we3lyfj7Z csnz]# mv otp_src_25.1.2 /usr/local/software/rabittmq/
[root@iZwz99vgpeg038we3lyfj7Z csnz]# mv rabbitmq_server-3.11.2/ /usr/local/software/rabittmq/
安装Erlang编译所需环境
yum install make gcc gcc-c++ build-essential openssl openssl-devel unixODBC unixODBC-devel kernel-devel m4 ncurses-devel
在 /usr/local/software 目录下创建一个erlang文件夹,我们将他统一装到/usr/local/software/erlang
[root@iZwz99vgpeg038we3lyfj7Z rabittmq]# mkdir -p /usr/local/software/erlang
编译Erlang
编译Erlang的时候由于不需要用java编译器编译,所以后面添加了 --without-javac
[root@iZwz99vgpeg038we3lyfj7Z otp_src_25.1.2]# ./configure --prefix=/usr/local/software/erlang/ --without-javac
安装Erlang
make && make install
这时候要等几分钟了
下面开始 配置Erlang环境变量
修改配置文件 /etc/profile
最下面新增两行
export ERLANG_HOME=/usr/local/software/erlang
export PATH=${ERLANG_HOME}/bin:${PATH}
改完配置文件,我们就可以重启使之生效了
source /etc/profile //重新读取配置文件
假如你遇到这个错误
说明你有强迫症 等号两边加了空格
把空格去掉就好了
接下来创建软连接
[root@iZwz99vgpeg038we3lyfj7Z otp_src_25.1.2]# ln -s /usr/local/software/erlang/bin/erl /usr/local/bin/erl
最后测试Erlang是否安装成功
2、安装RabbitMQ
配置RabbitMQ环境变量,同样是那个配置文件 /etc/profile 新增下面两行
# RabbitMQ Environment
export RABBITMQ_HOME=/usr/local/software/rabbitmq/rabbitmq_server-3.11.2
export PATH=${RABBITMQ_HOME}/sbin:${PATH}
继续重启配置文件
source /etc/profile //重新读取配置文件
开启Web管理界面插件,便于访问RabbitMQ
设置RabbitMQ开机启动
# 设置RabbitMQ开机启动
source /etc/profile
/usr/local/software/rabbitmq/rabbitmq_server-3.11.2/sbin/rabbitmq-server -detached
添加上述代码到 /etc/rc.d/rc.local 中
后台启动RabbitMQ服务
[root@iZwz99vgpeg038we3lyfj7Z sbin]# ./rabbitmq-server -detached
同样,我们也为 RabbitMQ创建一个软连接
[root@iZwz99vgpeg038we3lyfj7Z sbin]# ln -s /usr/local/software/rabittmq/rabbitmq_server-3.11.2/sbin/rabbitmqctl /usr/local/bin/rabbitmqctl
继续重启配置文件
source /etc/profile //重新读取配置文件
在浏览器的地址栏中输入你 服务器的ip地址:15672,即可访问RabbitMQ的管理登录界面
如果访问不了的,看一下你的端口开放了没,假如是云服务器,得去控制台开放15672端口,自己的本地虚拟机就把防火墙关了就好
默认用户名和密码都为 guest
假如报错提示
创建我们自己的账号
[root@iZwz99vgpeg038we3lyfj7Z sbin]# ./rabbitmqctl add_user csnz password
设置 用户角色
[root@iZwz99vgpeg038we3lyfj7Z sbin]# ./rabbitmqctl set_user_tags csnz administrator
设置用户权限
语法:
rabbitmqctl [--node <node>] [--longnames] [--quiet] set_permissions [--vhost <vhost>] <username> <conf> <write> <read>
用户 csnz 具有 /vhost 这个 virtual host中所有资源的配置、写、读权限
[root@iZwz99vgpeg038we3lyfj7Z sbin]# ./rabbitmqctl set_permissions -p "/" csnz ".*" ".*" ".*"
最后我们再查看一下当前用户
[root@iZwz99vgpeg038we3lyfj7Z sbin]# ./rabbitmqctl list_users
网页重新登陆即可
版权声明:本文为csnz123123原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。