RabbitMQ - 初级

本文详细介绍了中间件的基本概念、特点和使用场景,重点讲解了消息队列RabbitMQ,包括其安装、管理界面、权限操作以及高可用集群配置。此外,讨论了消息队列的分发策略、持久化和协议,适合初学者快速掌握RabbitMQ。
摘要由CSDN通过智能技术生成

Rabbit MQ - 初级

1、什么是中间件

什么是中间件?

中间件是介于应用系统和系统软件之间的一类软件,它使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享、功能共享的目的。目前,它并没有很严格的定义,但是普遍接受IDC的定义:中间件是一种独立的系统软件服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。从这个意义上可以用一个等式来表示中间件:中间件=平台+通信,这也就限定了只有用于分布式系统中才能叫中间件,同时也把它与支撑软件和实用软件区分开来。

举例

  • RMI (Remote Method Invocations,远程调用)
  • Load Balancing(负载均衡,将访问负荷分散到各个服务器中)
  • Transparent Fail-over(透明的故障切换)
  • Clustering(集群,用多个小的服务器代替人型机)
  • Back-end-Integration(后端集成,用现有的、新开发的系统如何去集成遗留的系统)
  • Transaction事务全局/局部)全局事务(分布式事务)局部事务(在同一数据库联接内的事务)
  • Dynamic Redeployment(动态重新部署,在不停止原系统的情况下,部署新的系统)
  • Security(安全)
  • Caching(缓存)

为什么要使用中间件?

具体地说,中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减少程序设计的复杂性,将注意力集中在自己的业务上,不必再为程序在不同系统软件上的移植而重复工作,从而大大减少了技术上的负担。中间件带给应用系统的,不只是开发的简便、开发周期的缩短,也减少了系统的维护、运行和管理的工作量,还减少了计算机总体费用的投入。

中间件的特点

为解决分布异构问题,人们提出了中间件(middleware)的概念。中间件是位于平台(硬件和操作系统)和应用之间的通用服务,如下图所示,这些服务具有标准的程序接口和协议。针对不同的操作系统和硬件平台,它们可以有符合接口和协议规范的多种实现。
在这里插入图片描述

  • 满足大量应用的需要
  • 运行于多种硬件和OS平台
  • 支持分布计算,提供跨网络、硬件和OS平台的透明性的应用或服务的交互
  • 支持标准的协议
  • 支持标准的接口

在项目中什么时候使用中间件技术

在项目的架构和重构中,使用任何技术和架构的改变我们都需要谨慎斟酌和思考,因为任何技术的融入和变化都可能使人员,技术,和成本的增加,中间件的技术一般现在一些互联网公司或者项目中使用比较多,如果你仅仅还只是一个初创公司建议还是使用单体架构,最多加个缓存中间件即可,不要盲目追求新或者所谓的高性能,而追求的背后一定是业务的驱动和项目的驱动,因为一旦追求就意味着你的学习成本,公司的人员结构以及服务器成本,维护和运维的成本都会增加,所以需要谨慎选择和考虑。

2、中间件技术及架构概述

在这里插入图片描述

什么是消息中间件

在早期的项目开发中,采用的都是单体架构:
在这里插入图片描述
在企业开发的中,大部分的初期架构都采用的是单体架构的模式进行架构,而这种架构的典型的特点:就是把所有的业务和模块,源代码,静态资源文件等都放在一个一工程中,如果其中的一个模块升级或者迭代发生一个很小变动都会重新编译和重新部署项目。这种的架构存在的问题就是:

  • 1:耦合度太高
  • 2∶运维的成本过高
  • 3:不易维护
  • 4:服务器的成本高
  • 5:以及升级架构的复杂度也会增大
    这样就有后续的分布式架构系统。如下

分布式架构

在这里插入图片描述

通俗一点:就是一个请求由服务器端的多个服务(服务或者系统)协同处理完成

好处:

  • 服务系统的独立,占用的服务器资源减少和占用的硬件成本减少,确切的说是:可以合理的分配服务资源,不造成服务器资源的浪费
  • 系统的独立维护和部署,耦合度降低,可插拔性。
  • 系统的架构和技术栈的选择可以变的灵活(而不是单纯的选择java)
  • 弹性的部署,不会造成平台因部署造成的瘫痪和停服的状态。

3、基于中间件技术的分布式系统架构

在这里插入图片描述

从上图中可以看出来,消息中间件是

  • 利用可靠的消息传递机制进行系统和系统直接的通讯
  • 通过提供消息传递和消息的排队机制,它可以在分布式系统环境下扩展进程间的通讯。

消息中间件的应用场景

  • 1:跨系统数据传递
  • 2:高并发的流量削峰
  • 3:数据的分发和异步处理
  • 4:大数据分析与传递
  • 5:分布式事务

4、消息队列协议

我们知道消息中间件负责数据的传递,存储,和分发消费三个部分,数据的存储和分发的过程中肯定要遵循某种约定成俗的规范,你是采用底层的TCP/IP;UDP协议还是其他的自己取构建等,而这些约定成俗的规范就称之为:协议。

所谓协议是指:

  • 计算机底层操作系统和应用程序通讯时共同遵守的一组约定,只有遵循共同的约定和规范,系统和底层操作系统之间才能相互交流。
  • 和一般的网络应用程序的不同它主要负责数据的接受和传递,所以性能比较的高。
  • 协议对数据格式和计算机之间交换数据都必须严格遵守规范。

网络协议的三要素

  • 1.语法。语法是用户数据与控制信息的结构与格式,以及数据出现的顺序。
  • 2.语义。语义是解释控制信息每个部分的意义。它规定了需要发出何种控制信息,以及完成的动作与做出什么样的响应。
  • 3.时序。时是对事件发生顺序的详细说明。

比如我MQ发送一个信息,是以什么数据格式发送到队列中,然后每个部分的含义是什么,发送完毕以后的执行的动作,以及消费者消费消息的动作,消费完毕的响应结果和反馈是什么,然后按照对应的执行顺序进行处理。如果你还是不理解:大家每天都在接触的http请求协议:

1:语法: http规定了请求报文和响应报文的格式。
2:语义:客户端主动发起请求称之为请求。(这是一种定义,同时你发起的是post/get请求)
3:时序:一个请求对应一个响应。(一定先有请求在有响应,这个是时序)

而消息中间件采用的并不是http协议,而常见的消息中间件协议有:OpenWire、AMQP、MQTT、Kafka,OpenMessage协议。

面试题:面试题:为什么消息中间件不直接使用http协议呢?

  • 因为http请求报文头和响应报文头是北较复杂的,包含了cookie,数据的加密解密,状态码,响应码等附加的功能,但是对于一个消息而言,我们并不需要这么复杂,也没有这个必要性,它其实就是负责数据传递,存储,分发就行,一定要追求的是高性能。尽量简洁,快速。
  • 大部分情况下http大部分都是短链接,在实际的交互过程中,一个请求到响应很有可能会中断,中断以后就不会进行持久化,就会造成请求的丢失。这样就不利于消息中间件的业务场景,因为消息中间件可能是一个长期的获取消息的过程,出现问题和故障要对数据或消息就行持久化等,目的是为了保证消息和数据的高可靠和稳健的运行。

AMQP协议

在这里插入图片描述

AMQP:(全称: Advanced Message Queuing Protocol)是高级消息队列协议。由摩根大通集团联合其他公司共同设计。是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。Erlang中的实现有RabbitMQ等。

特性:

  • 分布式事务支持。
  • 消息的持久化支持。
  • 高性能和高可靠的消息处理优势。

MQTT协议

在这里插入图片描述

MQTT协议: (Message Queueing Telemetry Transport)消息队列是IBM开放的一个即时通讯协议,物联网系统架构中的重要组成部分。

特点:

  • 轻量
  • 结构简单
  • 传输快,不支持事务
  • 没有持久化设计。

应用场景:

  • 适用于计算能力有限
  • 低带宽
  • 网络不稳定的场景。

OpenMessage协议

在这里插入图片描述

是近几年由阿里、雅虎和滴滴出行、Stremalio等公司共同参与创立的分布式消息中间件、流处理等领域的应用开发标准。
特点:

  • 结构简单
  • 解析速度快
  • 支持事务和持久化设计

Kafka协议

在这里插入图片描述

Kafka协议是基于TCP/IP的二进制协议。消息内部是通过长度来分割,由一些基本数据类型组成。
特点:

  • 结构简单
  • 解析速度快
  • 无事务支持
  • 有持久化设计

5、消息队列持久化

持久化:

简单来说就是将数据存入磁盘,而不是存在内存中随服务器重启断开而消失,使数据能够持久保存

常见持久化方式

AtiveMQRabbitMQKafkaRocketMQ
文件存储支持支持支持支持
数据库支持///

6、消息的分发策略

MQ消息队列有如下几个角色:

  1. 生产者
  2. 存储消息
  3. 消费者

那么生产者生成消息以后,MQ进行存储,消费者是如何获取消息的呢? 一般获取数据的方式无外乎推(push)或者拉(pull)两种方式,典型的git就有推拉机制,我们发送的http请求就是一种典型的拉取数据库数据返回的过程。而消息队列MQ是一种推送的过程,而这些推机制会适用到很多的业务场景也有很多对应推机制策略。

消息分发策略的机制对比

AtiveMQRabbitMQKafkaRocketMQ
发布订阅支持支持支持支持
轮询分发支持支持支持/
公平分发/支持支持/
重发支持支持/支持
消息拉取/支持支持支持

7、消息队列高可用与高可靠

什么是高可用机制

所谓高可用:是指产品在规定的条件和规定的时刻或时间内处于可执行规定功能状态的能力。
当业务量增加时,请求也过大,一台消息中间件服务器的会触及硬件(CPU,内存,磁盘)的极限,一台消息服务器已经无法满足业务的需求,所以消息中间件必须支持集群部署。来达到高可用的目的。

集群模式1-Master-slave 主从共享数据的部署方式

在这里插入图片描述
生产者讲消费发送到Master节点,所有的都连接这个消息队列共享这块数据区域,Master节点负责写入,一旦Master挂掉,slave节点继续服务。从而形成高可用。

集群模式2-Master-slave 主从同步部署方式

在这里插入图片描述
这种模式写入消息同样在Master主节点上,但是主节点会同步数据到slave节点形成副本,和zookeeper或者redis主从机制很类同。这样可以达到负载均衡的效果,如果消费者有多个这样就可以去不同的节点就行消费,以为消息的拷贝和同步会暂用很大的带宽和网络资源。在后续的rabbitmq中会有使用。

集群模式3-多主集群同步部署方式
在这里插入图片描述

集群模式4-多主集群转发部署方式
在这里插入图片描述

如果你插入的数据是master中,元数据信息会存储数据的相关描述和记录存放的位置(队列)。
它会对描述信息也就是元数据信息就行同步,如果消费者在slave中进行消费,发现自己几点没有对应的消息,可以从对应的元数据信息中去查询,然后返回对应的消息信息,场景:比如买火车票或者黄牛买演唱会门票,比如第一个黄牛有顾客说要买的演唱会门票,但是没有但是他会去联系其他的黄牛询问,如果有就返回。

集群模式5 Master-Slave与Broker-cluster组合的方案

在这里插入图片描述
实现多主多从的热备机制来完成消息的高可用以及数据的热备机制,在生产规模达到一定的阶段的时候,这种使用的频率比较高。

反正终归三句话:

  • 要么消息共享
  • 要么消息同步
  • 要么元数据共享

什么是高可靠机制?

所谓高可用是指:是指系统可以无故障低持续运行,比如一个系统突然崩溃,报错,异常等等并不影响线上业务的正常运行,出错的几率极低,就称之为:高可靠。
在高并发的业务场景中,如果不能保证系统的高可靠,那造成的隐患和损失是非常严重的。如何保证中间件消息的可靠性呢?可以从两个方面考虑:

  • 消息的传输:通过协议来保证系统间数据解析的正确性。
  • 消息的存储可靠:通过持久化来保证消息的可靠性。

8、RabbitMQ入门及安装

下载链接
环境准备:CentOS7.x+ Erlang

安装Erlang

将下载好的Erlang安装包进行解压

rpm -Uvh erlang-23.3-2.el7.x86_64.rpm

安装成功

yum install -y erlang

查看版本

erl -v

安装socat

yum install -y socat

安装RabbitMQ

将下载好的RabbitMQ安装包进行解压

rpm -Uvh rabbitmq-server-3.8.14-1.el7.noarch.rpm

安装成功

yum install -y rabbitmq-server

启动

systemctl start rabbitmq-server

查看状态

systemctl status rabbitmq-sever

设置为开机自启

systemctl enable rabbitmq-server

停止

systemctl stop rabbitmq-server

重启

systemctl restart rabbitmq-server

9、RabbitMQ管理界面及授权操作

RabbitMQ管理界面

默认情况下,rabbitmq是没有安装web客户端插件,需要安装才可以生效

rabbitmq-plugins enable rabbitmq_management

说明: rabbitmq有一个默认账号和密码是:guest,默认情况只能在localhost本机下访问,所以需要添加一个远程登录的用户。

安装完毕后重启服务即可

systemctl restart rabbitmq-server

在浏览器访问

在这里插入图片描述

授权账号和密码

新增用户

rabbitmqctl add_user admin admin

设置用户分配操作权限

rabbitmqctl set_user_tags admin administrator

用户级别:

  • 1、administrator:可以登录控制台、查看所有信息、可以对rabbitmq进行管理·
  • 2、monitoring:监控者登录控制台,查看所有信息
  • 3、policymaker:策略制定者登录控制台,指定策略。
  • 4、managment:普通管理员登录控制台

为用户添加资源权限

rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

小结

rabbitmqctl add_user 账号 密码
rabbitmqctl set_user_tags 账号 administrator
rabbitmqctl change_password 账户 新密码
rabbitmqctl delete_user 账户
rabbitmqctl list_users
rabbitmqctl set_permissions -p / 账户".*" ".*" ".*"

10、RabbitMQ之Docker安装

虚拟化容器技术----安装Docker

(1) yum 包更新到最新

yum update

(2) 卸载旧的docker

yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine

(3) 安装需要的软件包

yum install -y yum-utils

yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo

(4) 安装Docker引擎

yum install docker-ce docker-ce-cli containerd.io

(5) 查看Docker版本

docker -v

(6) 启动Docker

systemctl start docker

(7) 配置阿里云镜像加速器

在这里插入图片描述

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://xwv67wba.mirror.aliyuncs.com"] } EOF
systemctl daemon-reload
systemctl restart docker

docker 基本命令

Docker上安装RabbitMQ

拉取RabbitMQ 镜像

docker pull rabbitmq-management

创建并运行容器

docker run di --name=myrabbit -p 15672:15672 rabbitmq:management

–hostname:指定容器主机名称
–name:指定容器名称
-p:将mq端口号映射到本地
或者运行时设置用户和密码(跳过前两步,一步到位安装)

docker run -di --name myrabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:management

查看日志

docker logs -f myrabbit

容器正常运行
使用http://你的IP地址:15672 ,访问rabbitmq控制台

11、RabbitMQ的角色分类

1、none

不能访问management plugin

2、management:查看自己相关节点信息

  • 列出自己可以通过AMQP登入的虚拟机
  • 查看自己的虚拟机节点 virtual hosts 的queues,exahange和bindings信息
  • 查看和关闭自己的channels和connections
  • 查看有关自己的虚拟机节点 virtual hosts 的统计信息,包括其他用户在这个节点 virtual hosts 中的活动信息

3、Policymaker

  • 包含management所有权限
  • 查看和创建和删除自己的virtual hosts所属的policies和parameters信息。

4、Monitoring

  • 包含management所有权限
  • 罗列出所有的virtual hosts,包括不能登录的virtual hosts。
  • 查看其他用户的connections和channels信息
  • 查看节点级别的数据如clustering和memory使用情况
  • 查看所有的virtual hosts的全局统计信息。

5、Administrator

  • 最高权限
  • 可以创建和删除virtual hosts
  • 可以查看,创建和删除users
  • 查看创建permisssions
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_子栖_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值