文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

mq消息丢失问题如何解决

2024-04-02 19:55

关注

这篇“mq消息丢失问题如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“mq消息丢失问题如何解决”文章吧。

1.生产者存放消息的过程中丢失消息

mq消息丢失问题如何解决

解决办法:

(1)事务机制:(同步方式,不推荐)

对于RabbitMQ消息队列来说,生产者发送数据之前开启RabbitMQ的事务机制 channel.txselect,如果消息没有进队列,则生产者受到异常报错,并进行回滚channel.txRollback,然后重试发送消息。如果收到了消息,则可以提交事务channel.txCommit。这是同步操作,会影响性能。

(2)异步机制:

confirm模式来解决同步机制的性能问题。每次生产者发送的消息都会分配一个唯一的id,如果写入到了RabbitMQ队列中,则RabbitMQ会回传一个ack消息,说明这个消息接收成功。如果RabbitMQ没能处理这个消息,则回调nack接口。说明需要重试发送消息。

也可以自定义超时时间 + 消息 id 来实现超时等待后重试机制。但可能出现的问题是调用ack接口时失败了,所以会出现消息被发送两次的问题,这个时候就需要保证消费者消费消息的幂等性。

事务模式和confirm模式的区别:

事务机制是同步的,提交事务后悔被阻塞直到提交事务完成后。

confirm 模式异步接收通知,但可能接收不到通知。需要考虑接收不到通知的场景。

2.消息队列消息丢失

mq消息丢失问题如何解决

解决办法:

(1)创建Queue时,将其设置为持久化

(2)发送消息的时候将消息的deliveryMode设置为2(将消息持久化 1:非持久化,2:持久化)

(3)开启生产者 confirm`模式,可以重试发送消息。

3.消费者丢失消息

mq消息丢失问题如何解决

解决办法:

关闭RabbitMQ的自动ack,每次生产者将消息写入消息队列后,就自动回传一个ack给生产者。

消费者处理完消息再主动ack,告诉消息队列我处理完了。

4.总结

(1)开启生产者消息手动确认机制

(2)开启消息持久化,队列持久化,交换机持久化(默认开启)

(3)开启消费者消息手动确认机制

以上就是关于“mq消息丢失问题如何解决”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯