【精华】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一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
1月前
|
消息中间件 存储 监控
RabbitMQ 面试题及答案整理,最新面试题
RabbitMQ 面试题及答案整理,最新面试题
114 1
|
消息中间件 SQL 存储
超详细的RabbitMQ入门,看这篇就够了!
RabbitMQ入门,看这篇就够了
180978 56
|
8月前
|
消息中间件 存储 NoSQL
RabbitMQ入门指南:初学者也能读懂的教程(四)
RabbitMQ入门指南:初学者也能读懂的教程
40 0
|
7月前
|
消息中间件 存储 网络协议
RabbitMQ 26问,基本涵盖了面试官必问的面试题
RabbitMQ 26问,基本涵盖了面试官必问的面试题
67 1
|
8月前
|
消息中间件 缓存 中间件
怎么使用Kafka?收藏这篇短文就可以了
怎么使用Kafka?收藏这篇短文就可以了
153 0
|
8月前
|
消息中间件 存储
RabbitMQ入门指南:初学者也能读懂的教程(三)
RabbitMQ入门指南:初学者也能读懂的教程(三)
57 0
|
8月前
|
消息中间件 存储 NoSQL
RabbitMQ入门指南:初学者也能读懂的教程(五)
RabbitMQ入门指南:初学者也能读懂的教程
108 0
|
8月前
|
消息中间件 存储 缓存
RabbitMQ入门指南:初学者也能读懂的教程(二)
RabbitMQ入门指南:初学者也能读懂的教程(二)
88 0
|
8月前
|
消息中间件 存储 网络协议
RabbitMQ入门指南:初学者也能读懂的教程(一)
RabbitMQ入门指南:初学者也能读懂的教程
435 0
|
消息中间件 存储 监控
RabbitMQ进阶学习复习笔记
RabbitMQ进阶学习复习笔记
194 0
RabbitMQ进阶学习复习笔记

热门文章

最新文章