相关推荐recommended
【RabbitMQ】MQ的基本概念、RabbitMQ简介及安装
作者:mmseoamin日期:2024-02-22

文章目录

  • MQ的基本概念
    • MQ概述
    • MQ 的优势和劣势
    • 常见的MQ产品
    • RabbitMQ简介
    • RabbitMQ的安装
      • 1. 安装依赖环境
      • 2. 安装Erlang
      • 3. 安装RabbitMQ
      • 4. 开启管理界面及配置
      • 5. 启动
      • 6. 配置虚拟主机及用户
        • 用户角色
        • Virtual Hosts配置
          • 创建Virtual Hosts
          • 设置Virtual Hosts权限

            MQ的基本概念

            MQ概述

            MQ全称 Message Queue(消息队列),是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信。

            一般我们的分布式系统有两种方式进行通信:

            • 第一种:【RabbitMQ】MQ的基本概念、RabbitMQ简介及安装,在这里插入图片描述,第1张

              A系统直接通过远程调用的方式来访问B系统

            • 第二种:

              【RabbitMQ】MQ的基本概念、RabbitMQ简介及安装,在这里插入图片描述,第2张

              发送方称为生产者,接收方称为消费者

              A系统借助于第三方,第三方再将数据给B系统,实现间接的通信。消息队列就属于这种方式

              MQ 的优势和劣势

              MQ的优势有三点:

              • 应用解耦
              • 异步提速
              • 异步提速

                应用解耦方面

                【RabbitMQ】MQ的基本概念、RabbitMQ简介及安装,在这里插入图片描述,第3张

                当用户点击按钮下订单的时候,访问订单系统,然后订单系统要访问库存、支付、物流系统这里他有两种方式进行访问。一种是直接远程调用,这样的话订单系统和右边的三个系统会耦合到一起,这就会带来一些问题。

                比如说我们的库存系统挂了,那么随之我们的订单系统也会无法工作:

                【RabbitMQ】MQ的基本概念、RabbitMQ简介及安装,在这里插入图片描述,第4张

                假设说现在使用订单系统的时候,还有多调用一个X系统,那么我们又要去修改订单系统的代码,当需求增多,变化频繁的时候这显然很麻烦。

                【RabbitMQ】MQ的基本概念、RabbitMQ简介及安装,在这里插入图片描述,第5张

                系统的耦合性越高,容错性就越低,可维护性就越低。

                而如果我们使用MQ的话,当用户下订单访问订单系统,订单系统只需要发送消息给MQ就行了,这个时候就可以给用户反馈说订单成功了。而右边的系统只需要分别从MQ里面把订单消息数据拿出来,然后在自己的系统里面进行处理就行。并且此时库存系统如果挂了,那么订单系统是没有任何影响的。

                【RabbitMQ】MQ的基本概念、RabbitMQ简介及安装,在这里插入图片描述,第6张

                异步提速

                【RabbitMQ】MQ的基本概念、RabbitMQ简介及安装,在这里插入图片描述,第7张

                一个下单操作耗时:20 + 300 + 300 + 300 = 920ms

                用户点击完下单按钮后,需要等待920ms才能得到下单响应,太慢!

                【RabbitMQ】MQ的基本概念、RabbitMQ简介及安装,在这里插入图片描述,第8张

                用户点击完下单按钮后,只需等待25ms就能得到下单响应 (20 + 5 =25ms)。

                提升用户体验和系统吞吐量(单位时间内处理请求的数目)。

                削峰填谷

                【RabbitMQ】MQ的基本概念、RabbitMQ简介及安装,在这里插入图片描述,第9张

                【RabbitMQ】MQ的基本概念、RabbitMQ简介及安装,在这里插入图片描述,第10张

                【RabbitMQ】MQ的基本概念、RabbitMQ简介及安装,在这里插入图片描述,第11张

                使用了 MQ 之后,限制消费消息的速度为1000,这样一来,高峰期产生的数据势必会被积压在 MQ 中,高峰就被“削”掉了,但是因为消息积压,在高峰期过后的一段时间内,消费消息的速度还是会维持在1000,直到消费完积压的消息,这就叫做“填谷”。

                使用MQ后,可以提高系统稳定性。

                MQ的劣势:

                【RabbitMQ】MQ的基本概念、RabbitMQ简介及安装,在这里插入图片描述,第12张

                • 系统可用性降低

                  系统引入的外部依赖越多,系统稳定性越差。一旦 MQ 宕机,就会对业务造成影响。如何保证MQ的高可用?

                • 系统复杂度提高

                  MQ 的加入大大增加了系统的复杂度,以前系统间是同步的远程调用,现在是通过 MQ 进行异步调用。如何保证消息没有被重复消费?怎么处理消息丢失情况?那么保证消息传递的顺序性?

                • 一致性问题

                  A 系统处理完业务,通过 MQ 给B、C、D三个系统发消息数据,如果 B 系统、C 系统处理成功,D 系统处理失败。如何保证消息数据处理的一致性?

                  常见的MQ产品

                  目前业界有很多的 MQ 产品,例如 RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq等,也有直接使用 Redis 充当消息队列的案例,而这些消息队列产品,各有侧重,在实际选型时,需要结合自身需求及 MQ 产品特征,综合考虑。

                  【RabbitMQ】MQ的基本概念、RabbitMQ简介及安装,在这里插入图片描述,第13张

                  RabbitMQ简介

                  AMQP,即 Advanced Message Queuing Protocol(高级消息队列协议),是一个网络协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。2006年,AMQP 规范发布。类比HTTP。

                  【RabbitMQ】MQ的基本概念、RabbitMQ简介及安装,在这里插入图片描述,第14张

                  AMQP这个过程就是:由生产者发布消息到交换机,交换机再通过路由规则将消息发送到不同的队列中去存储,然后消费者从队列中监听拿走对应的消息来消费。、

                  2007年,Rabbit 技术公司基于 AMQP 标准开发的 RabbitMQ 1.0 发布。RabbitMQ 采用 Erlang 语言开发。Erlang 语言由 Ericson 设计,专门为开发高并发和分布式系统的一种语言,在电信领域使用广泛。

                  RabbitMQ 基础架构如下图:

                  【RabbitMQ】MQ的基本概念、RabbitMQ简介及安装,在这里插入图片描述,第15张

                  RabbitMQ 中的相关概念:

                  • Broker:接收和分发消息的应用,RabbitMQ Server就是 Message Broker
                  • Virtual host:出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似于网络中的 namespace 概念。当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出多个vhost,每个用户在自己的 vhost 创建 exchange/queue 等
                  • Connection:publisher/consumer 和 broker 之间的 TCP 连接
                  • Channel:如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候建立 TCP Connection的开销将是巨大的,效率也较低。Channel 是在 connection 内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的 channel 进行通讯,AMQP method 包含了channel id 帮助客户端和message broker 识别 channel,所以 channel 之间是完全隔离的。Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP connection 的开销
                  • Exchange:message 到达 broker 的第一站,根据分发规则,匹配查询表中的 routing key,分发消息到queue 中去。常用的类型有:direct (point-to-point), topic (publish-subscribe) and fanout (multicast)
                  • Queue:消息最终被送到这里等待 consumer 取走
                  • Binding:exchange 和 queue 之间的虚拟连接,binding 中可以包含routing key。Binding 信息被保存到 exchange 中的查询表中,用于 message 的分发依据

                    RabbitMQ 提供了 6 种工作模式:

                    • 简单模式
                    • work queues
                    • Publish/Subscribe 发布与订阅模式
                    • Routing路由模式
                    • Topics 主题模式
                    • RPC 远程调用模式(远程调用,不太算 MQ;暂不作介绍)。

                      官网对应模式介绍:https://www.rabbitmq.com/getstarted.html

                      【RabbitMQ】MQ的基本概念、RabbitMQ简介及安装,在这里插入图片描述,第16张

                      最后我们还要说说JMS:

                      JMS 即 Java 消息服务(JavaMessage Service)应用程序接口,是一个 Java 平台中关于面向消息中间件的API

                      • JMS 是 JavaEE 规范中的一种,类比JDBC
                      • 很多消息中间件都实现了JMS规范,例如:ActiveMQ。
                      • RabbitMQ 官方没有提供 JMS 的实现包,但是开源社区有

                        RabbitMQ的安装

                        1. 安装依赖环境

                        在线安装依赖环境:

                        yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz
                        

                        2. 安装Erlang

                        上传

                        erlang-18.3-1.el7.centos.x86_64.rpm

                        socat-1.7.3.2-5.el7.lux.x86_64.rpm

                        rabbitmq-server-3.6.5-1.noarch.rpm

                        # 安装
                        rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm
                        

                        如果出现如下错误

                        【RabbitMQ】MQ的基本概念、RabbitMQ简介及安装,在这里插入图片描述,第17张

                        说明gblic 版本太低。我们可以查看当前机器的gblic 版本

                        strings /lib64/libc.so.6 | grep GLIBC
                        

                        【RabbitMQ】MQ的基本概念、RabbitMQ简介及安装,在这里插入图片描述,第18张

                        当前最高版本2.12,需要2.15.所以需要升级glibc

                        • 使用yum更新安装依赖

                          sudo yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make -y
                          
                        • 下载rpm包

                          wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-utils-2.17-55.el6.x86_64.rpm &
                          wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-static-2.17-55.el6.x86_64.rpm &
                          wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-2.17-55.el6.x86_64.rpm &
                          wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-common-2.17-55.el6.x86_64.rpm &
                          wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-devel-2.17-55.el6.x86_64.rpm &
                          wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-headers-2.17-55.el6.x86_64.rpm &
                          wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/nscd-2.17-55.el6.x86_64.rpm &
                          
                        • 安装rpm包

                          sudo rpm -Uvh *-2.17-55.el6.x86_64.rpm --force --nodeps
                          
                        • 安装完毕后再查看glibc版本,发现glibc版本已经到2.17了

                          strings /lib64/libc.so.6 | grep GLIBC
                          

                          【RabbitMQ】MQ的基本概念、RabbitMQ简介及安装,在这里插入图片描述,第19张

                          3. 安装RabbitMQ

                          # 安装
                          rpm -ivh socat-1.7.3.2-5.el7.lux.x86_64.rpm
                          # 安装
                          rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm
                          

                          4. 开启管理界面及配置

                          # 开启管理界面
                          rabbitmq-plugins enable rabbitmq_management
                          # 修改默认配置信息
                          vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app 
                          # 比如修改密码、配置等等,例如:loopback_users 中的 <<"guest">>,只保留guest
                          

                          5. 启动

                          service rabbitmq-server start # 启动服务
                          service rabbitmq-server stop # 停止服务
                          service rabbitmq-server restart # 重启服务
                          
                          • 设置配置文件
                            cd /usr/share/doc/rabbitmq-server-3.6.5/
                            cp rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
                            

                            6. 配置虚拟主机及用户

                            用户角色

                            RabbitMQ在安装好后,可以访问http://ip地址:15672 ;其自带了guest/guest的用户名和密码;如果需要创建自定义用户;那么也可以登录管理界面后,如下操作:

                            【RabbitMQ】MQ的基本概念、RabbitMQ简介及安装,在这里插入图片描述,第20张

                            【RabbitMQ】MQ的基本概念、RabbitMQ简介及安装,在这里插入图片描述,第21张

                            角色说明:

                            1、 超级管理员(administrator)

                            可登陆管理控制台,可查看所有的信息,并且可以对用户,策略(policy)进行操作。

                            2、 监控者(monitoring)

                            可登陆管理控制台,同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)

                            3、 策略制定者(policymaker)

                            可登陆管理控制台, 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。

                            4、 普通管理者(management)

                            仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理。

                            5、 其他

                            无法登陆管理控制台,通常就是普通的生产者和消费者。

                            Virtual Hosts配置

                            像mysql拥有数据库的概念并且可以指定用户对库和表等操作的权限。RabbitMQ也有类似的权限管理;在RabbitMQ中可以虚拟消息服务器Virtual Host,每个Virtual Hosts相当于一个相对独立的RabbitMQ服务器,每个VirtualHost之间是相互隔离的。exchange、queue、message不能互通。 相当于mysql的db。Virtual Name一般以/开头。

                            创建Virtual Hosts

                            【RabbitMQ】MQ的基本概念、RabbitMQ简介及安装,在这里插入图片描述,第22张

                            设置Virtual Hosts权限

                            【RabbitMQ】MQ的基本概念、RabbitMQ简介及安装,在这里插入图片描述,第23张

                            【RabbitMQ】MQ的基本概念、RabbitMQ简介及安装,在这里插入图片描述,第24张