说明
通过rightPopAndLeftPush原子操作在拿出消息前将消息先推到另一个补偿队列中,保证消息可靠性
通过xxljob等定时任务轮询实现补偿
消息设置通知时间字段以实现补偿5分钟后的通知
为什么补偿不使用spring的定时任务?因为分布式轮询会导致重复处理,xxljob设置单机执行则不会
redis配置
1 | spring: |
使用
仅添加补偿机制
实体类
1 | public class NotifyDto { |
生产端
1 | import org.springframework.data.redis.core.StringRedisTemplate; |
消费端
从队列中取出后先放入pending队列中,等处理完之后再删除,如果系统宕机可以接着处理
1 | import org.springframework.data.redis.core.StringRedisTemplate; |
补偿优化
bean
1 | ```java |
job
1 |
|
时间节点补偿方式
消息设置时间节点字段以实现每补偿失败一次,延顺到下个时间节点
bean
1 | public class NotifyDto { |
job
1 | /** |
Leave a comment