6. 设计层面的消息可靠性保证:消息补偿、消息幂等性保障

设计层面的消息可靠性保证

需要两个保证:消息补偿、消息幂等性保障

1. 消息补偿

设计图示:
在这里插入图片描述

执行流程:
	1. 生产者被调用:给Q1发送一个消息,给Q3发送一个延迟消息,同时将业务数据加入数据库DB中
		Q3被回调检查服务监听 -> 3.
	2. Q1被消费者监听,确认消费后发送给Q2
		Q2也被回调监听服务监听 -> 3.
	3. 回调监听服务监听到消息之后 将消息写入数据库MDB
		若监听到Q2的消息,则将消息写入数据库MDB。
		若监听到Q3的消息,没有Q2消息,则说明消息消费失败,调用生产者(Producer)从新发送消息
	4. 定时检查服务监控 MDB 和 DB 数据库
		负责监控两个数据库的数据是否一致,保障生产者发送的消息都被消费者消费了。

注意:
这种情况可以保证消息都被消费掉,但是却无法保证消息不会被重复消费:
如果在消费者成功消费消息后的地方出现问题,也就是:Q2,步骤5,6,7的地方出现问题,将会导致重新调用生产者发送同一消息,而这时的消费者其实已经成功消费了这一个消息,也就造成了重复消费

解决重复消费的办法:


2. 消息的幂等性保障-乐观锁机制

在这里插入图片描述
在数据库表中添加一个 version 字段,使用乐观锁机制就可以解决这一个重复消费问题。
如果是同一个消息,数据库中的信息不会有任何改变。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值