redis队列实现高并发 JAVA面试如何保证消息不被重复消费?如何保证消息消费的幂等性?
JAVA面试如何保证消息不被重复消费?如何保证消息消费的幂等性?
我没事,来这里玩,开始在各种网络上寻找技术信息,之后以“头条”为主。从寻找信息到交朋友。因为我觉得事情落后于时代,有人认为,是因为自己水平不高。只是在心里想,无法实现现实
做程序员最惨莫过于出BUG,如何保证消息不被重复消费?
为了保证消息只被消费一次,我们可以依赖消息中间件的事务和精确的once机制。
当然,它也可以从消费端实现,以确保消费处理的幂等性。一个简单的想法是为每条消息设置一个唯一的键,比如UUID。消费者读取消息后,会将密钥放入redis队列。在消费时,它会首先确定redis队列中是否有唯一的密钥来决定是否执行。实践中经常使用redis的setnx方法。
消息队列,如何保证消息不被重复消费?
现在消息机制一般是通过中间件实现的,如Kafka、ActiveMQ等。一般来说,有两种消费策略:至少一次和最多一次。
首先,至少一次。在这种情况下,使用消息很重要,不能容忍丢失。使用者从中间件集群中提取消息,在内部消费,并将消费结果通知集群。如果用户计算机重新启动或网络丢失数据包,此时将提取重复的消息。一般的解决方案是保证对使用者业务逻辑进行幂等处理。
第二,至少再来一次。此时,消息可能会丢失,并且不会重复消费。
作为接收器,保持接口幂等是一项基本功能。它可以处理一些意外情况,例如集群失败,或者需要跟踪消息数据的历史以便重新处理等。
redis队列实现高并发 redis固定大小队列 redis定长队列
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。