157人参与 • 2024-07-28 • Erlang
第一种:生产者弄丢了数据。生产者将数据发送到 rabbitmq 的时候,可能数据就在半路给搞丢了,因为网络问题啥的,都有可能。
第二种:rabbitmq 弄丢了数据。mq还没有持久化自己挂了
第三种:消费端弄丢了数据。刚消费到,还没处理,结果进程挂了,比如重启了。
方案1 :开启rabbitmq事务
可以选择用 rabbitmq 提供的事务功能,就是生产者发送数据之前开启 rabbitmq 事务channel.txselect
,然后发送消息,如果消息没有成功被 rabbitmq 接收到,那么生产者会收到异常报错,此时就可以回滚事务channel.txrollback
,然后重试发送消息;如果收到了消息,那么可以提交事务channel.txcommit
。
// 开启事务
channel.txselect
try {
// 这里发送消息
} catch (exception e) {
channel.txrollback
// 这里再次重发这条消息
}
// 提交事务
channel.txcommit
缺点:
rabbitmq 事务机制是同步的
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论