【精华】RabbitMQ整理(30分钟读完)

简介: RabbitMQ的组成部分,Exchange的4种类型,RabbitMQ的6种工作模式,相关概念:死信队列。

前言

消息队列的3个作用:解耦、异步、削峰

一、RabbitMQ的组成部分(含图解)

  • Connection:publisher /consumer和broker之间的tcp之间的连接。
  • Channel:Channel 是在connection 内部建立的逻辑连接。Channel 作为轻量级的Connection 极大减少了操作系统建立TCP Connection 的开销。
  • Broker:接收和分发消息的应用。
  • Virtual Host:用来环境隔离,每个vhost本质上就是一个mini版的RabbitMQ服务器,拥有自己的队列、交换器、绑定和权限机制。
  • Binding:exchange 和queue之间的虚拟连接,binding中可以包含routing key,binding 信息被保存到exchange中的查询表中,用于message的分发依据。
  • Exchange:message到达broker的第一站,根据message中的routing key和查询表中Binding的routing key进行匹配,匹配上就分发消息到quene中去。常用的类型有:direct(point-topoint),topic(publish-subscribe)andfanout(multicast)。
  • Queue:消息被发送到这里等待consumer取走。

在这里插入图片描述

二、Exchange的4种类型

  1. fanout:每个发到fanout类型交换器的消息都会分到所有绑定的队列上去。
  2. direct:消息中的路由键(routing key)如果和Binding中的routing key一致,交换器就将消息发到对应的队列中。
  3. topic:消息中的路由键(routing key)如果和Binding中的routing key模式匹配上,交换器就将消息发到对应的队列中。
  4. headers:匹配AMQP消息的header而不是路由键(Routing-key),此外headers交换器和direct交换器完全一致,但是性能差了很多,目前几乎用不到了。

三、RabbitMQ的6种工作模式

  1. 普通队列模式(无Exchange):一个生产者,一个队列,一个消费者。
  2. 工作队列模式(无Exchange):一个生产者,一个队列,多个消费者。多个消费者中只会有一个会成功地消费消息。
  3. 发布/订阅模式(Exchange=fanout):一个生产者,一个交换机,多个队列,多个消费者。每个队列中消息一致,每个消费者消费同样的消息。
  4. Routing路由模式(Exchange=direct):一个生产者,一个交换机,多个队列,多个消费者。每个队列有自己唯一的Routing Key,根据message的Routing Key和binding中的Routing Key进行匹配,匹配上就分发到队列中去,给消费者消费。
  5. Topic 主题模式(Exchange=topic):一个生产者,一个交换机,多个队列,多个消费者。每个队列有自己唯一的Routing Key(含模糊匹配字符,如*),根据message的Routing Key和binding中的Routing Key(含模糊匹配字符)进行匹配,匹配上就分发到队列中去,给消费者消费。
  6. RPC 模式(Exchange=direct):使用MQ可以实现RPC的异步调用。客户端即是生产者也是消费者,向RPC请求队列发送RPC调用消息,同时监听RPC响应队列。服务端监听RPC请求队列的消息,收到消息后执行服务端的方法,得到的结果发送到RPC响应队列。

四、相关概念:死信队列

死信队列(DLX Dead-Letter-Exchange):专门存放未被正常消费的消息的队列。

3种导致消息变成死信的原因

  1. 消息过期(过期时间TTL)。
  2. 队列达到最大长度。
  3. 消息被消费者拒绝且requeue=false。

2种死信队列应用场景

  1. 保证消息不被丢失,专门存放消息。
  2. 作为延迟队列(delay),将达到过期的消息放在该队列中重新消费。需要
    两个交换机(生产者通过交换机发送给普通队列、普通队列通过交换机将死信转发给死信队列)
    两个队列(普通队列、死信队列 【注:队列模式为direct】)
    两个router key(生产者绑定交换机之间、死信交换机到死信队列之间)
相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
消息中间件 SQL 存储
超详细的RabbitMQ入门,看这篇就够了!
RabbitMQ入门,看这篇就够了
219852 69
|
2月前
|
API 微服务
阿里云微服务引擎 MSE 及 API 网关 2025 年 9 月产品动态
阿里云微服务引擎 MSE 及 API 网关 2025 年 9 月产品动态。
203 25
hutool工具随机获得列表中的元素
hutool工具随机获得列表中的元素
|
3月前
|
人工智能 安全 Java
【程序员必看】做Java,这一个AI插件就够了
飞算JavaAI插件助力开发者高效开发,覆盖需求分析、设计、编码全流程。智能分析、一键生成代码,大幅提升开发效率,让Java开发更轻松便捷。
|
3月前
|
SQL 数据库 数据安全/隐私保护
SQL基础:DDL、DML、DCL和TCL的区别与使用
本文详细解析了SQL语言的四大类别:数据定义语言(DDL)、数据操作语言(DML)、数据控制语言(DCL)和事务控制语言(TCL),涵盖每类语句的功能、语法、使用场景及示例。
|
存储 Kubernetes 调度
【赵渝强老师】什么是Kubernetes的Pod
Pod 是 Kubernetes 中的基本逻辑单位,代表集群上的一个应用实例。它可以由一个或多个容器组成,并包含数据存储和网络配置等资源。Pod 支持多种容器执行环境,如 Docker。Kubernetes 使用 Pod 管理容器,具有简化部署、方便扩展和调度管理等优点。视频讲解和图示详细介绍了 Pod 的组成结构和使用方式。
262 1
|
9月前
|
存储 缓存 Apache
小红书湖仓架构的跃迁之路
小红书研发工程师李鹏霖(丁典)在StarRocks年度峰会上分享了如何通过结合StarRocks和Iceberg实现极速湖仓分析架构。新架构使P90查询性能提升了3倍,查询响应时间稳定在10秒以内,存储空间减少了一半。RedBI自助分析平台支持灵活、快速的即席查询,优化了排序键和Join操作,引入DataCache功能显著提升查询性能。未来将探索近实时湖仓分析架构,进一步优化处理能力。
|
负载均衡 网络协议 数据安全/隐私保护
详解配置代理和IP设置的含义
详解配置代理和IP设置的含义
881 6
|
消息中间件 Dubbo 应用服务中间件
RabbitMQ 六种工作模式与应用场景
RabbitMQ 六种工作模式与应用场景
1206 0
|
消息中间件 Java Maven
如何在Java中使用RabbitMQ
如何在Java中使用RabbitMQ