消息中间件-RabbitMQ

RabbitMQ的相关概念

1、Producer:生产者,就是投递消息的一方,生产者创建消息之后,发布到RabbitMQ中。
消息一般可以包含两个部分:消息体和附加信息
消息体:在实际应用中,消息体一般是一个带有业务逻辑的数据结构。
附加信息:用来表述这个消息,比如目标交换器的名称、路由键和一些自定义的属性等。
2、Broker:消息中间件的服务节点,单个就表示服务器。
3、Virtual Host: 虚拟主机,表示一批交换器、消息队列和相关对象。
4、Channel:频道或信道,是建立在Connection连接之上的一种轻量级的连接。
5、RoutingKey:路由键。生产者将消息发给交换器的时候,一般会指定一个RoutingKey,用来指定这个消息的路由规则。需要和绑定键BindingKey联合使用。
6、Exchange:交换器,生产者将消息发送到Exchange,由交换器将消息路由到一个或者多个队列中,如果路由不到则返回给生产者,或者直接丢弃。
Exchange类型分为4种:
第一种:fanout,扇形交换机,它会把所有发送到该交换器的消息路由到所有与该交换器绑定的的队列中。
第二种:direct,直连交换机,它会把消息路由到那些BindingKey和RoutingKey完全匹配的队列中。
第三种:topic,主题交换机,与direct类似,但它可以通过通配符进行模糊匹配。
第四种:headers,头交换机,不依赖路由键的匹配规则来路由消息,而是根据发送的消息内容中的headers属性进行匹配。
7、Consumer:消费者,就是接受消息的一方。消费者连接到RabbitMQ服务器,并订阅到队列上。

RabbitMQ的工作流程

RabbitMQ的整体结构:
在这里插入图片描述
运转流程1
在这里插入图片描述
运转流程2
在这里插入图片描述
生产者发送消息的过程:
1、生产者连接到RabbitMQ Broker,建立一个连接(Connection)
2、生产者声明一个交换器,并设置相关属性,比如交换机类型,是否要持久化
3、生产者声明一个队列并设置相关属性,比如是否排它、是否持久化、是否自动删除等。
4、生产者通过路由键将交换器和队列绑定起来
5、生产者发送消息至RabbitMQ Broker,其中包含路由键、交换器等信息。
6、相应的交换器根据接收到的路由键查找相匹配的队列
7、如果找到,则将从生产者发送过来的消息存入相应的队列中
8、如果没有找到,则根据生产者配置的属性选择丢弃还是回退给生产者
9、关闭信道,关闭连接
消费者接收消息的过程:
1、生产者连接到RabbitMQ Broker,建立一个连接(Connection) ,开启一个通道(Channel)
2、消费者向RabbitMQ Broker请求消费相应队列中的消息,可能会设置相应的回调函数,以及做一些准备工作
3、等待RabbitMQ Broker回应并投递相对队列中的消息,消费者接收信息
4、消费者确认ack接收到的消息
5、RabbitMQ从队列中删除相应已经被确认的消息
6、关闭信道,关闭连接

RabbitMQ如何实现高可用

实现集群
集群的实现有两种方式:
1、普通模式
在这里插入图片描述
可靠性较差,因为元数据节点一旦挂掉,那么数据将丢失。

2、镜像模式
在这里插入图片描述
根据策略配置拷贝机制,可靠性较好。

RabbitMQ持久化

1、RabbitMQ持久化机制
RabbitMQ 的持久化分为队列持久化、消息持久化和交换器持久化。

队列持久化:队列的持久化是再定义队列时的durable参数来实现的,durable为true时,队列才会持久化。
在这里插入图片描述
RabbitMQ消息持久化:消息持久化通过消息的属性deliveryMode来设置是否持久化,在发送消息时通过basicPublish的参数传入。
在这里插入图片描述
RabbitMQ交换器持久化
同队列一样,交换器也需要在定义时设置持久化标识,否则在Broker重启后将丢失
在这里插入图片描述
2、RabbitMQ内存控制
内存控制会有一个阈值,当阈值达到设定的值时候,会出现内存报警,此时rabbit
MQ会阻塞所有的连接,默认是0.4.
3、RabbitMQ磁盘控制
与内存控制相似,但是磁盘控制是当磁盘剩余空间低于确定的阈值时,RabbitMQ同样会阻塞生产者,这样可以避免因非持久化的消息持续换页而耗尽磁盘空间导致服务崩溃。

RabbitMQ消息的可靠性

RabbitMQ的消息可靠性,一般是业务系统接入消息中间件时首要考虑的问题,一般通过三个方面保障。
1、发送可靠性:确保消息成功发送到Broker
2、存储可靠性:Broker对消息持久化,确保消息不会丢失
3、消费可靠性:确保消息成功被消费

发送可靠性经常分3个层级:
At most once:最多一次,消息可能会丢失,但是绝不会重复传输
At least once:最少一次,消息绝不会丢失,但可能会重复传输
Exactly once:恰好一次,每条消息肯定会被传输一次且仅传输一次

在这里插入图片描述
如果数据来源在数据库,生产者Producer获取数据后,通过sender发送给MQ Broker,MQ Broker只有拿到数据成功才会返回一个回馈值,Producer只有收到这个值,才能确定数据发送成功;否则尝试重新发送,当到达一定的发送次数,这条消息可能就会进入死信队列

存储可靠性:
将消息存储到磁盘当中去,如果没有存放到磁盘当中,存在了内存中,那么MQ Broker如果宕机,将会消息丢失。
消费可靠性:
consumer在接收到消息之后会返回给生产者一个ack,如果生产者没有接收到这个ack,那么此时queue中的消息就不能被移除,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值