栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

消息队列RabbitMq

消息队列RabbitMq

什么是消息队列

消息队列是以队列的形式,是一种"先进先出"的数据结构

为什么使用消息队列 削峰 削峰前

削峰后

异步

解耦 解耦前

解耦后

消息队列的缺点

系统可用性降低(单点故障,使用集群)

系统复杂性提高(多了一个中间件,多了一个服务)

一致性问题

消息丢失的原因

过程中所出现的丢失很大原因取决于网络

如何防止消息不丢失 开启RabbitMq持久化

消息写入后,持久化到磁盘,这样即使RabbitMq挂掉了,在恢复后也会自动去读取之前存储的数据.

概率极小的情况下,MQ还未进行持久化,可能就挂了,导致了数据的丢失

如何解决还未持久化出现的消息丢失情况

持久化需要跟生产者的confirm 机制相互配合,只有消息已经持久化到磁盘后,才会通知生产者 ack ,如果持久化到磁盘之前,RabbitMQ 挂了,数据丢失了,生产者收不到 ack,就有个消息补偿机制,会自己进行重发操作。

关闭RabbitMq的ack(只能保证在消费者)

消费方完成消费后进行手动ack确认,mq收到ack确认再删除本地消息,否,则不删除

解决消息的重复发送

在发送消息的时候,设置全局唯一的id.

消息在获取后,会使用id去redis中进行查询消费者是否成功消费,

没有消费过,则直接消费,存入redis,

消费过,啥也不干

消息是基于什么传输

基于TCP连接,使用信道的方式传输数据.信道是建立在TCP连接内的一个虚拟的连接,每条TCP连接上的信道数量没有限制.

生产者消息运转
    Producer先连接到Broker,建立连接Connection,开启一个信道(Channel)。Producer声明一个交换器并设置好相关属性。Producer声明一个队列并设置好相关属性。Producer通过路由键将交换器和队列绑定起来。Producer发送消息到Broker,其中包含路由键、交换器等信息。相应的交换器根据接收到的路由键查找匹配的队列。如果找到,将消息存入对应的队列,如果没有找到,会根据生产者的配置丢弃或者退回给生产者。关闭信道。管理连接。
消费者接收消息过程
    Producer先连接到Broker,建立连接Connection,开启一个信道(Channel)。向Broker请求消费响应的队列中消息,可能会设置响应的回调函数。等待Broker回应并投递相应队列中的消息,接收消息。消费者确认收到的消息,ack。RabbitMq从队列中删除已经确定的消息。关闭信道。关闭连接。
消息过期的出现原因

当给消息设置了一个过期时间,如果超时后还未被消费,就是消息过期,会进入死信队列

消息过期的解决

进入死信队列后,让专门的消费者去消费死信队列的消息,记录过期的消息,写入数据库记录日志,查询后,重新发给mq

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/758143.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号