【精华】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版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
6月前
|
消息中间件 存储 监控
RabbitMQ 面试题及答案整理,最新面试题
RabbitMQ 面试题及答案整理,最新面试题
217 1
|
6月前
|
存储 缓存 NoSQL
实战:第十一篇:StringRedisTemplate获取redis信息,面试官突击一问
实战:第十一篇:StringRedisTemplate获取redis信息,面试官突击一问
|
消息中间件 存储 网络协议
面试跳槽季惊艳面试官的回答:谈谈你对RabbitMQ工作原理的理解?
一个5年工作经验的小伙伴,在面试的时候被这样一个问题。谈谈你对RabbitMQ架构原理的理解。当时,这位小伙伴只解答说,我只会用,原理并没有关注过。那今天我给大家来分享一下我的理解。
95 1
|
消息中间件 存储 NoSQL
RabbitMQ入门指南:初学者也能读懂的教程(四)
RabbitMQ入门指南:初学者也能读懂的教程
104 0
|
消息中间件 存储 缓存
Redis源码剖析系列博文开篇&大纲
今年我启动了好几个比较有挑战的个人项目,比如写一门编程语言、成为一名视频UP主、写科幻小说…… 这些项目目前进度都很堪忧,一方面这些项目挑战都比较大,另一方面业余时间还要忙着吃吃喝喝、追剧、刷综艺、睡懒觉…… 不过有个项目进度不至于那么不堪,那就是今天的猪脚——《Redis源码剖析》系列博文,今天也是这个系列博文的开篇。为此,我也在github上建立了中文注解版的Redis源码库,详见https://github.com/xindoo/redis,目前已经添加近700行的中文注释,欢迎Star和关注。
79 0
|
消息中间件 存储 网络协议
RabbitMQ 26问,基本涵盖了面试官必问的面试题
RabbitMQ 26问,基本涵盖了面试官必问的面试题
1095 1
|
消息中间件 存储 网络协议
RabbitMQ入门指南:初学者也能读懂的教程(一)
RabbitMQ入门指南:初学者也能读懂的教程
1423 1
|
消息中间件 存储 缓存
RabbitMQ入门指南:初学者也能读懂的教程(二)
RabbitMQ入门指南:初学者也能读懂的教程(二)
150 0
|
消息中间件 存储 NoSQL
RabbitMQ入门指南:初学者也能读懂的教程(五)
RabbitMQ入门指南:初学者也能读懂的教程
145 0
|
消息中间件 存储
RabbitMQ入门指南:初学者也能读懂的教程(三)
RabbitMQ入门指南:初学者也能读懂的教程(三)
113 0