您当前的位置: 首页 >  rabbitmq

$驽马十驾$

暂无认证

  • 0浏览

    0关注

    31博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

RabbitMQ基础概念

$驽马十驾$ 发布时间:2022-09-02 13:45:09 ,浏览量:0

RabbitMQ基础概念
  • 1.RabbitMQ 的概念
  • 2.四大核心
  • 3.RabbitMQ 六大模式
  • 4.名词介绍

1.RabbitMQ 的概念

RabbitMQ 是一个消息中间件:它接收并转发消息。你可以把它当做一个快递站点,当你要发送一个包裹时,你把逼得包裹放到快递站,快递员最终会把你的快递送到收件人那里,按照这种逻辑,RabbitMQ 是一个快递站,一个快递员帮你传递快件。RabbitMQ 与快递的主要区别在于,它不处理快件而是接收、存储和转发消息数据。

2.四大核心
  1. 生产者:产生数据发送消息的程序是生产者
  2. 交换机:交换机是 RabbitMQ 非常重要的一个部件,一方面它接收来自生产者的消息,另一方面它将消息推送到队列中。交换机必须确切知道如何处理它接收到的消息,是将这些消息推送到特定队列还是推送到多个队列,亦或是把消息丢弃,这个得有交换机类型决定。
  3. 队列:队列是 RabbitMQ 内部使用的一种数据结构,尽管消息流经 RabbitMQ 和应用程序,但他们只能存储在队列中。队列仅受主机的内存和磁盘限制的约束,本质上是一个大的消息缓冲区。许多生产者可以将消息发送到一个队列,许多消费者可以尝试从一个队列接收数据。这就是我们使用队列的方式。
  4. 消费者:消费者与接收具有相似的含义。消费者大多时候是一个等待接收消息的程序。请注意:生产者、消费者和消息中间件很多时候并不在同一机器上。同一个应用程序既可以是生产者又是消费者。
3.RabbitMQ 六大模式

(1)简单模式: 在这里插入图片描述

P:生产者,也就是要发送消息的程序; C:消费者,消息的接收者,会一直等待消息的到来; queue:图中红色部分,消息队列,可以缓存消息;生产者向其中投递消息,消费者从中取出消息。

(2)Work queues 工作队列模式: 在这里插入图片描述

Work queues 与入门程序的简单模式相比,多了一个或多个消费端,多个消费端共同消费一个队列中的消息。 应用场景:对于任务过重或任务较多的情况,使用工作队列可以提高任务处理的速度。

(3)Publish/Subscribe 发布订阅模式 在这里插入图片描述

发布订阅模式:1.每个消费者监听自己的队列。2.生产者将消息发给broker,由交换机将消息转发到绑定此交换机的每个队列,每个绑定交换机的队列都将收到消息 在订阅模式中,相比于前面两种模式,多了一个exchange角色,而且过程略有变化: P:生产者,也就是要发送消息的程序,但是不再发送到队列中,而是发给X(交换机)。 C:消费者,消息的接收者,会一直等待消息的到来。 Queue:消息队列,接收消息、缓存消息。 Exchange:交换机,即图中的X。一方面,接收生产者发送的消息;另一方面,知道如何处理消息,例如:递交给某个特别的队列、递交给所有队列、或是将消息丢弃。到底如何操作,取决于Exchange的类型。 Exchange有常见以下三种类型: Fanout:广播,将消息交给所有绑定到交换机的队列。 Direct:定向,把消息交给符合指定routing key 的队列。 Topic:通配符,把消息交给符合routing pattern (路由模式)的队列。 注意:Exchange(交换机)只负责转发消息,不具备存储消息的能力,因此如果没有任何队列与Exchange绑定,或者没有符合路由路由规则的队列,那么消息会丢失!

(4)Routing 路由模式 路由模式特点: 队列与交换机的绑定,不能是任意绑定了,而是要指定一个 RoutingKey(路由key)。 消息队列的发送方在向 Exchange 发送消息时,也必须指定消息的 RoutingKey。 Exchange不再把消息交给每一个绑定的队列,而是根据消息的 RoutingKey 进行判断,只有队列的 RoutingKey 与消息的 RoutingKey 完全一致,才会接收消息。 在这里插入图片描述

P:生产者,向 Exchange 发送消息,发送消息时会指定一个 RoutingKey。 X:Exchange(交换机),接收生产者的消息,然后把消息递交给 RoutingKey 完全匹配的队列。 C1:消费者,其所在队列指定了需要 RoutingKey 为 error 的消息。 C2:消费者,其所在队列指定了需要 RoutingKey 为 info、error、warning 的消息。

(5)Topics 通配符模式 Topic 类型与 Direct 相比,都是可以根据 RoutingKey 把消息路由到不同的队列。只不过 Topic 类型 Exchange 可以让队列在绑定 RoutingKey 的时候使用通配符!

RoutingKey 一般是有一个或多个单词组成,多个单词之间以“.”分隔,例如:item.insert 通配符规则: # :匹配一个或多个词 * :匹配有且仅有一个的词 举例: item.#:能够匹配 item.insert.abc 或者 item.insert item.*:只能匹配 item.insert 在这里插入图片描述 在这里插入图片描述

红色Queue:绑定的是 usa.#,因此凡是以 usa. 开头的 RoutingKey 都会被匹配到。 黄色Queue:绑定的是 #.news,因此凡是以 .news 结尾的 RoutingKey 都会被匹配到

(6)发布确认模式 原理: 生产者将信道设置成 confire 模式,一旦信道进入 confirm 模式,所有在该信道上面发布的消息都将会被指派一个唯一的 ID(从 1 开始),一旦消息被投递到所匹配的队列之后,broker 就会发送一个确认给生产者(包含消息的卫衣 ID),这就使得生产者知道消息已经正确到达目的队列了,如果消息和队列是可持久化的,那么确认消息将在消息写入磁盘之后发出。 在这里插入图片描述

RabbitMQ 有三种发布确认模式,分别为: 1.单个确认模式:每发送一条消息,确认一次,发布同步数量消息,其耗时最长; 2.批量确认模式:每发送一部分消息,批量同步确认一次,若有消息无法发出该模式无法确认是哪个消息无法发送; 3.异步批量确认模式:批量异步确认,该模式性能最好,在有错误情况下很好处理。

4.名词介绍

在这里插入图片描述 **Broker:**接收和分发消息的应用,RabbitMQ Server 就是 Message Broker; **Virtual host:**出于多用户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似于网络中的 nameSpace 概念。当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出多个 vhost,每个用户在自己的 vhost 创建 exchange/queue 等; Connection: publish/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,topic 和 fanout。 Queue: 消息最终被送到这里等待 consumer 取走 Binding: exchange 和 queue 之间的虚拟连接,binding 中可以包含 routing key,Binding 信息被保存到 exchange 中的查询表中,用于 message 的分发依据。

关注
打赏
1663377658
查看更多评论
立即登录/注册

微信扫码登录

0.0379s