REDIS(限定条件下)实现并发的可靠消息队列

问题描述:
在著名的生产/消费模式中,生产者生产消息,消费者消费消息,生产者将生产的消息推送到消息队列中,消费者从消息队列中获取消息进行处理,若消费者获取消息后没有处理完成就发生了异常,则可能导致消息的丢失。

可靠消息队列是指在上述这种情况下,消息如果能够得到保持,并被后续的消费者继续消费则称该消息队列为可靠的消息队列,反之则称为不可靠的消息队列

网上有一种观点认为通过让redis创建两个队列,将消息从第一个队列转存到第二个队列(使用rpoplpush),在转存的过程中,消费者会获取到该信息的值,当消费者处理完成后再去将该消息从第二个队列中移除,若消费者挂掉,则消息由于转存到了第二个队列,此时只要再启动一个client定期去处理第二个队列的消息即可。这种方法存在两个问题,第一,多个消费者同时将消息转存入第二个队列,当消费者处理完这个消息之后,该消息在第二个队列中很难找到(因为在这个过程中第二个队列可能已经被插入了多个消息)。第二,假设你的消息很特别,内容不会重复,你可以通过lrem函数找到并删除消息,另外启动的那个专门处理第二个队列的client面对的队列中的信息数量必须很小,如果很大client处理不过来又不能使用并发,因为使用并发必须将消息pop出队列2,如果pop出队列2,那就又回到了我们本来要绕开的问题。

综上所述,若要使用redis实现并发的可靠消息队列,必须满足以上限定条件,所以不如直接换用rabbitmq吧,mq自带的消息确认机制,轻松的解决了这个问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值