了解一下RabbitMQ

目标:

了解消息中间件 — 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语言编写的

中间件嘛,加一层呐

二、消息队列应用场景

应用解耦 :

  • 消息队列减少了服务之间的耦合性,不同的服务可以通过消息队列进行通信,而不用关心彼此的实现细节。

异步处理 :

  • 消息队列本身是异步的,它允许接收者在消息发送很长时间后再取回消息。

流量削锋 :

  • 当上下游系统处理能力存在差距的时候,利用消息队列做一个通用的”载体”,在下游有能力处理的时候,再进行分发与处理。

日志处理 :

  • 日志处理是指将消息队列用在日志处理中,比如 Kafka 的应用,解决大量日志传输的问题。

消息通讯 :

  • 消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯,比如实现点对点消息队列,或者聊天室等。

消息广播 :

  • 如果没有消息队列,每当一个新的业务方接入,我们都要接入一次新接口。有了消息队列,我们只需要关心消息是否送达了队列,至于谁希望订阅,是下游的事情,无疑极大地减少了开发和联调的工作量。

三、RabbitMQ相关原理

AMQP 协议模型由三部分组成:生产者、消费者和服务端,执行流程如下:

生产者是连接到 Server,建立一个连接,开启一个信道。

生产者声明交换器和队列,设置相关属性,并通过路由键将交换器和队列进行绑定。

消费者也需要进行建立连接,开启信道等操作,便于接收消息。

生产者发送消息,发送到服务端中的虚拟主机。

虚拟主机中的交换器根据路由键选择路由规则,发送到不同的消息队列中。

订阅了消息队列的消费者就可以获取到消息,进行消费。

了解一下RabbitMQ_第1张图片

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

了解一下RabbitMQ_第2张图片

去Erlang官网顺下来

https://www.erlang.org/downloads

了解一下RabbitMQ_第3张图片

https://www.rabbitmq.com/

了解一下RabbitMQ_第4张图片
了解一下RabbitMQ_第5张图片
了解一下RabbitMQ_第6张图片
了解一下RabbitMQ_第7张图片

至此,两个东西已经顺下来了

了解一下RabbitMQ_第8张图片

传到 远程上后,进行解压安装

# 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

这时候要等几分钟了

了解一下RabbitMQ_第9张图片

下面开始 配置Erlang环境变量

修改配置文件 /etc/profile

最下面新增两行

export ERLANG_HOME=/usr/local/software/erlang
export PATH=${ERLANG_HOME}/bin:${PATH}

改完配置文件,我们就可以重启使之生效了

source /etc/profile  //重新读取配置文件

假如你遇到这个错误

在这里插入图片描述

说明你有强迫症 等号两边加了空格

了解一下RabbitMQ_第10张图片

把空格去掉就好了

接下来创建软连接

[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_第11张图片

设置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端口,自己的本地虚拟机就把防火墙关了就好

了解一下RabbitMQ_第12张图片

默认用户名和密码都为 guest

假如报错提示

了解一下RabbitMQ_第13张图片

创建我们自己的账号

[root@iZwz99vgpeg038we3lyfj7Z sbin]# ./rabbitmqctl add_user csnz password

设置 用户角色

[root@iZwz99vgpeg038we3lyfj7Z sbin]# ./rabbitmqctl set_user_tags csnz administrator

设置用户权限

语法:rabbitmqctl [--node ] [--longnames] [--quiet] set_permissions [--vhost ]

用户 csnz 具有 /vhost 这个 virtual host中所有资源的配置、写、读权限

[root@iZwz99vgpeg038we3lyfj7Z sbin]# ./rabbitmqctl set_permissions -p "/" csnz ".*" ".*" ".*"

了解一下RabbitMQ_第14张图片

最后我们再查看一下当前用户

[root@iZwz99vgpeg038we3lyfj7Z sbin]# ./rabbitmqctl list_users

了解一下RabbitMQ_第15张图片

网页重新登陆即可

了解一下RabbitMQ_第16张图片

你可能感兴趣的:(#,RabbitMQ,rabbitmq)