RabbitMq 核心知识点小结

1、概述

RabbitMQ是一个开源的消息中间件,实现了高性能、可靠的消息传递机制。它使用AMQP(Advanced Message Queuing Protocol)作为消息传输协议,支持多种编程语言和平台。RabbitMQ提供了可靠的消息传递、灵活的路由、消息确认机制、消息持久化、消息发布与订阅等功能,使得它在构建分布式系统、微服务架构、异步任务处理等场景中广泛应用。

2、基本概念

下图为rabbitmq 的内部结构图
在这里插入图片描述
从上图也可以发现几个基本概念(Publisher,Exchange,Message,Binding ,Queue ,Connection,Channel , Consuer, Virtual host)
下面逐一进行说明

1)Publisher

消息生产者(Publisher),负责将消息(Message)发送到交换机(Exchange)

2)Exchange

交换机(Exchange):交换机接收来自生产者的消息,并根据路由键(Routing Key)将消息路由到一个或多个队列。交换机类型包括直连(Direct)、主题(Topic)、扇出(Fanout)和头部(Headers)。

3)Message

消息(Message),包含消息头(即附属的配置信息)和消息体(即消息的实体内容)
由生产者(Publisher),将消息(Message)推送到 交换机(Exchange),由消费者(Consuer)从 队列(Queue) 中获取

4)Binding

绑定(Binding ),用于给 交换机(Exchange)和 队列(Queue) 建立关系,从而决定将这个交换机中的哪些消息(Message),发送到对应的 队列(Queue)

4)Queue

消息队列(Queue),是消息的存储区域,生产者将消息发送到队列,消费者从队列中接收消息并进行处理。队列具有名称、属性和绑定到交换机的路由键。

5)Connection

连接(Connection),内部有一个或者多个通道(Channel ),跟消息队列(Queue)打交道

6)Channel

通道(Channel ),MQ 与外部打交道都是通过 Channel 来的,发布消息、订阅队列还是接收消息,这些动作都是通过 Channel 完成;

7)Consuer

消费者,从消息队列中获取消息的主体

8)Virtual host

虚拟主机,表示一批交换器、消息队列和相关对象。

虚拟主机是共享相同的身份认证和加密环境的独立服务器域。

每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有自己的队列、交换器、绑定和权限机制。

vhost 是 AMQP 概念的基础,必须在连接时指定,RabbitMQ 默认的 vhost 是 /

3、消息投递和消费

RabbitMQ的消息投递和消费是核心功能之一。下面是关于RabbitMQ消息投递和消费的基本概念和步骤:

1)消息投递(Publishing):

  • 生产者(Publisher)将消息发送到交换机(Exchange)。
  • 生产者需要指定交换机名称、路由键(Routing Key)和消息内容。
  • 交换机根据路由键的匹配规则将消息路由到一个或多个队列。

2)消息消费(Consuming):

  • 消费者(Consumer)从队列中获取消息并进行处理。
  • 消费者需要先连接到RabbitMQ服务器,创建一个通道(Channel)来进行操作。
  • 消费者需要指定要消费的队列名称,并注册一个消息处理回调函数。

3)消费模式(Consuming Patterns):

  • 简单消费模式(Simple Consumer):一个消费者从队列中获取消息并处理。
  • 工作队列模式(Work Queues):多个消费者共享同一个队列,消息被平均分配给消费者。
  • 发布/订阅模式(Publish/Subscribe):一个消息被广播到多个消费者。
  • 主题模式(Topics):使用通配符匹配路由键,将消息发送给符合条件的队列。

4)消息确认(Message Acknowledgment):

  • 消费者在处理完消息后,可以向RabbitMQ发送消息确认(Message Ack)。
  • 消费者发送消息确认后,RabbitMQ将从队列中删除已确认的消息。
  • 消费者可以选择手动确认消息(Manual Acknowledgment)或自动确认消息(Automatic Acknowledgment)。

5)消息持久化(Message Durability):

  • 队列和消息可以设置为持久化,确保在RabbitMQ服务器重启后消息不会丢失。
  • 持久化的消息会被写入磁盘,但仍然需要注意磁盘写入的性能开销。

6)消息重试(Message Retry):

  • 如果消费者无法处理消息,可以选择将消息重新放回队列以进行重试。
  • 可以设置消息的最大重试次数,并使用延迟重试机制。

7)消息过期(Message Expiration):

  • 消息可以设置过期时间,在达到指定时间后自动从队列中删除。
  • 过期时间可以在消息的属性中设置,或在队列的设置中进行全局配置。

4、确保消息顺序

  • 单一消费者:首先,你可以保证每个队列只有一个消费者。这将确保在同一队列中的消息按照先后顺序被消费。

  • 基于单一队列的多个消费者:如果你需要使用多个消费者来处理同一队列中的消息,那么你可以使用 RabbitMQ 的“基于公平分发”的消费者模式。这将确保每个消费者按照消息的到达顺序依次消费消息。

  • 多个队列:你可以创建多个队列,并且让消费者分别消费这些队列中的消息。这样,你可以通过确保将消息发送到特定队列来控制消息的顺序。

  • 消息 ID:在你的消息中包含一个唯一的 ID,以便消费者可以根据 ID 对消息进行排序。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

旺仔001

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

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

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

打赏作者

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

抵扣说明:

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

余额充值