RabbitMQ基本知识

一.基本概念

1.组成要素

1.生产者:消息的生产者,亦可理解成消息的发送方。
2.消费者:消息的接收方。
3.消息:懂的都懂,消息主体。
4.交换器:与生产者直接交互,负责将生产者的消息发送给指定队列
5.队列:与消费者直接交互,从交换器获得消息后发送给消费者
6.绑定键:用来形容队列,可以理解成队列的门牌号。
7.路由键:用来形容消息,决定消息最后应交给哪几个队列。
UML图:
在这里插入图片描述上图就是一个运行时RabbitMQ的连接图,生产者与消费者通过信道(channel)与RabbitMQ交互。交换器与队列为多对多的关系。若队列下包含多个消费者,会采用轮询的方式决定消息交给哪个消费者。

channel:生产者/消费者 与RabbitMQ交互渠道,与TCP连接相比,更加高效(毕竟少了三次握手四次挥手),有人说像是TCP连接池,不过更准确的说法应该是TCP复用技术。一个TCP连接可同时属于多个信道,各个线程通过信道ID使用TCP连接,保证数据的隔离性。

二.消息从发送到被消费的基本流程

在这里插入图片描述上图就是大概流程,为了加强记忆,我们通过 “找失主” 来加深理解。
角色:
1.钱包(消息)
2.良好市民X(生产者)
3.警局(rabbitMQ)
4.警察(交换器)
5.各个警察负责区域下的一户户人家
6.失主(消费者)
建议根据上面的连接流程图看,这里在粘贴一次
在这里插入图片描述

剧本开始

场景一:生产者生产消息并将消息发送给交换器

一天,市民X(消费者) 在公园里发现了一个钱包(消息),翻看后发现失主人住在A.1(路由键),之后便将钱包(消息)失主住址(路由键) 一起送到了当地警局(RabbitMQ)警察(交换器) 手上。

场景二:交换器根据路由键和绑定键确定消息队列

本场景由于警察不同,会有不同的故事。

Direct警官:

Direct警官(交换器Direct模式) 非常负责,在知道了失主的住址(路由键) 后,立刻就比对自己负责区域下各户的门牌号(绑定键) , 发现失主的住址(路由键)门牌号(绑定键) 完全相同 后,就会将孩子送过去,若发现没有相同的,则会将 钱包(消息) 直接丢弃。

fanout警官:

fanout警官(交换器fanout模式) 是一个土豪。他根本不需要知道失主的住址(路由键) , 就自己花钱弄了好多一样的钱包(消息) ,送到了所管辖区域下所有的住户手中。还有这好事?

topic警官:

topic警官(交换器topic模式) 非常干练,它适用于非常多的情况,有时候,钱包可能只包含模糊的信息,就比如此时,警官只知道失主的门牌号是A.*,根据连接图可看到topic负责的用户包括A.1,A.1.a,A.2,A.2.a这四户。因为实在没办法确定,所以topic警官只能找来两个一样的 钱包(信息) ,分别送到A.1与A.2两户中。

总结:

1.direct模式:完全匹配,只有路由键与绑定键完全匹配(大小写也必须一样)才可以匹配
2.fanout:广播形式,不论路由键与绑定键是否匹配,会将拿到的消息广播给全部连接的队列。
3.topic:通过“.”将路由键分为多个表示,如A.1,B.2等。绑定键可以通过使用#.1,A.#,#.2等形式,接收符合条件的消息。(常用)
✳:匹配一个字符,如A.*,仅可以匹配A.1,A.2等。
#:匹配多个字符,如A.#,可以匹配A.1,A.2,A.1.a,A.2.b等。
4.header(与direct类似,但不实用);

二.消息队列优点

1.异步处理:异步可以减少系统对请求的响应时间(能进行异步解耦的需要要求业务是非实时的)
2.应用解耦:传统调用需要两个系统互相调用,而消息中间件可以让两个系统仅与消息中间件交互
3.日志处理:
4.消息通讯:如数据库备份的时候。
5.流量削峰:在数据量某一瞬间特别大的时候如秒杀,可以通过MQ缓冲数据,请求写入MQ,服务器从MQ拿取适量的数据,完成后将响应写入MQ。以达到流量削峰的目的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值