手把手快速入门 RabbitMQ (详细)【一、基础篇】

一、Rabbitmq-简介

1.RabbitMQ是什么?
目前市面上性能较好(吞吐量比较高、高并发)、功能完整、健壮、稳定、易用、社区比较活跃的一款消息中间件

什么是MQ/消息中间件?
Message Queue(消息队列),遵循队列的先进先出原则(FIFO),只是队列里存放的都是消息。
是一种跨进程的通信机制,用于上下游传递消息。
是一种非常常见的 “将上下游 逻辑解耦+物理解耦”消息通信服务架构设计
使用了之后,消息上游和下游都只需要依赖MQ即可
可以想象成MQ像一个邮局,当你把你想要邮寄的邮件放在邮箱里时, 可以确定,邮递员最终会将邮件递送给你的收件人

  1. RabbitMQ解决了什么问题?

    在这里插入图片描述

    • a.流量消锋、限流
      在流量高峰期,MQ可以作为缓冲,通过MQ做限流,把短时间内非常大数量级的消息,分散成一段时间来处理

    • b.更好的应对“应用解耦”的场景
      应用中的各个业务模块可以解耦开(比如拆成订单模块、库存模块、物流模块、支付模块),当某一个模块出现问题,需要一段时间调整维护,MQ有能力将模块间传递的消息先缓存在消息队列中,等出异常的模块恢复后,就可以继续进行业务处理。
      在故障的过程中,可以实际减少用户对于故障的的感知,并提高了系统的可用性。

    • c.更好的应对“异步处理”的场景
      有些场景下服务的调用是异步的,比如服务A调服务B后,服务B收到消息后需要花很久的时间执行自身的业务处理逻辑,
      这个时候,对于B,B可以处理完消息后,只对MQ发送一条完成消息,MQ直接转发这个完成消息给到A。
      对于A来说,A只监听MQ给发过来的完成消息即可

  2. 具体使用的场景

    • a.排队算法
      使用消息队列“先进先出”特性

    • b.秒杀活动
      使用消息队列“先进先出”特性,比如说1件商品,50个人在抢,一定只有一个人能完成下单业务,且哪怕50个请求相差只有非常短的差距,队列的特性使之一定能排出顺序(前提是同一个队列)

    • c.消息分发
      一个消息,分发给多个地方,比如说天气预报,由气象局,分发给各大媒体供应商。

    • d.数据同步
      使用MQ消息异步的特性

    • e.处理耗时任务
      使用MQ消息异步的特性,生产者推送给MQ消息,消费者拿到这条消息后,执行耗时较长的业务逻辑,此时消费者可以先发送“消息已接收”的接收确认。这样不必等到消费者完成业务逻辑再返回确认给生产者。

二、Rabbitmq-基础概念介绍

队列(Queue):队列本身是数据结构中的概念。数据存储在一个队列中,数据是有顺序的,先进先出,后进后出。其中一侧负责进数据,另一侧负责出数据。
在MQ中,消息队列用来保存消息直到发送给消费者。它是消息的容器。一个消息可投给一个或多个队列。消息一直在队列里面,等待消费者连接到这个队列将其取走。

沿用之前的比喻:RabbitMQ本身可以看做是一个邮局,那么队列就是邮局中邮箱的名称

消息(Message):消息由消息头和消息体组成。
消息体是不透明的,携带具体发送的内容。
消息头由一系列可选属性组成(就是指定的特性),这些属性包括:routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出消息可能持久性存储)等

生产者(Producer/Publisher):消息的生产者。一个向交换器发布消息的客户端应用程序,负责发布消息到MQ上。

消费者(Consumer):消息的消费者。一个从消息队列中取得消息的客户端应用程序,负责从MQ上取得消息进行消费。

交换机(Exchange):用来接收生产者发送的消息并将这些消息路由给服务器中的队列。就是负责把生产者发布的消息,转发给队列,转发给哪些队列,由交换机的类型与设置决定。
两个点:“生产者其实发消息时只到交换机”、“由交换机决定发给哪个队列

连接(Connection):指rabbit服务器和客户端建立的TCP连接

信道(Channel):建立在TCP上的虚拟连接,每个连接(Connection)上可以创建一个或多个信道,注意RabbitMQ 处理的每条 AMQP 指令都是通过信道完成的

路由键(Routing Key):交换机(Exchange)是通过路由键(Routing Key)来决定把消息推送到具体的哪个队列(Queue)中,一句话概括:“由路由键决定消息要推到哪

路由键的使用
1.首先需要交换机和队列使用路由键互相绑定,这种场景下的Routing Key也被称之为“Binding Key”
2.生产者推送消息时,也需要在发送的消息头中指定“Routing Key”
3.若步骤2与步骤1中的Routing Key能对应起来,那交换机就会把这条消息推送给这个绑定好的队列


三、Rabbitmq-工作过程介绍

图片1在本图中,P为我们的“生产者”,C为“消费者”,中间的红框可以简单理解成我们的中间件
工作过程:生产者发布消息至MQ中,消费者从MQ中拿到消息并进行后续的处理消费


在这里插入图片描述
将模型继续扩展,本图中在MQ中细分了“Exchange(交换机)”、“Queue(队列)”。
工作过程:生产者(Publisher/Producer)发布消息至交换机(Exchange),交换机将消息路由转发给相应的队列(Queue)。消费者从队列中获取消息。

在这里插入图片描述
将模型继续扩展,本图中再次进行了细化
工作过程:

  • 1.生产者(Publisher/Producer)先与MQ建立一个连接(Connection),并在这个连接上开启一个或多个信道(Channel)
  • 2.生产者声明交换机(Exchange),包括交换机的类型、名称、是否持久化等属性(交换机上有绑定队列)
  • 3.生产者发送消息,并指定消息是否持久化等属性和路由键(routing key)
  • 4.交换机收到消息后(消息中携带有发送时指定的路由键),会根据路由键,将消息路由转发到所匹配的队列(Queue)中
  • 5.消费者(Consumer)监听到有消息已经接收,会从队列中拿到消息,并进行后续的业务处理,即进行消费
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值