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

前言

消息队列的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)、fanout(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(生产者绑定交换机之间、死信交换机到死信队列之间)
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值