美文网首页
基于异步消息队列List lpush-brpop(rpush-b

基于异步消息队列List lpush-brpop(rpush-b

作者: 陈光岚_强化班 | 来源:发表于2021-08-01 16:31 被阅读0次

    使用rpush和lpush操作入队列,lpop和rpop操作出队列。

    List支持多个生产者和消费者并发进出消息,每个消费者拿到都是不同的列表元素。

    但是当队列为空时,lpop和rpop会一直空轮训,消耗资源;所以引入阻塞读blpop和brpop(b代表blocking),阻塞读在队列没有数据的时候进入休眠状态,

    一旦数据到来则立刻醒过来,消息延迟几乎为零。

    注意

    你以为上面的方案很完美?还有个问题需要解决:空闲连接的问题。

    如果线程一直阻塞在那里,Redis客户端的连接就成了闲置连接,闲置过久,服务器一般会主动断开连接,减少闲置资源占用,这个时候blpop和brpop或抛出异常,

    所以在编写客户端消费者的时候要小心,如果捕获到异常,还有重试。

    缺点:

    做消费者确认ACK麻烦,不能保证消费者消费消息后是否成功处理的问题(宕机或处理异常等),通常需要维护一个Pending列表,保证消息处理确认。

    不能做广播模式,如pub/sub,消息发布/订阅模型

    不能重复消费,一旦消费就会被删除

    不支持分组消费

    相关文章

      网友评论

          本文标题:基于异步消息队列List lpush-brpop(rpush-b

          本文链接:https://www.haomeiwen.com/subject/rtcrvltx.html