20k+面试题之解决消息队列数据丢失

消息队列里面的数据丢失

为什么要解决数据的丢失

因为如果说公司使用mq来传递非常核心的消息,比如说在计费系统里面使用计费,扣费的一些消息,计费系统是很重的一个业务,操作是很耗时的。所以说广告系统整体的架构里面,实际上是将计费做成异步化的,就是在中间就是加了一个MQ。

然后广告主投放了一个广告,明明说好了,用户点击一次扣费1块钱。结果要是用户动不动点击了一次,但是扣费系统搞的消息丢了,此时公司就会不断的少几块钱(因为此时广告主应该给公司这几块钱,但实际上消息丢了,广告主就不需要付钱了),几块钱,积少成多,这个就对公司是一个很大的损失。

消息队列怎么会有数据丢失

消息队列里面的丢数据,mq一般分为三种,要么是生成着发送消息丢了,要么是mq自己弄丢了,要么是我们消费的时候弄丢了。

这里我们借助rabbitmq和kafka分别来分析一下上面的这三种数据丢失的情况

RabbitMq里面的丢失数据

RabbitMq之生产者丢失数据

生产者将数据发送到rabbitmq的时候,可能数据就在半路给搞丢了,因为网络啥的问题,都有可能。

使用事务模式解决生产者数据丢失问题

此时可以选择用rabbitmq提供的事务功能,就是生产者发送数据之前开启rabbitmq事务(channel.txSelect),然后发送消息,如果消息没有成功被rabbitmq接收到࿰

你可能感兴趣的:(20k+面试题专栏,队列,kafka,rabbitmq,消息队列,数据丢失)