本文主要简述redis作为消息队列的利弊和场景。

消息中间件要素

消息模型

  • 传送模型(发布订阅or点对点)
    是基于topic的发布订阅还是点对点模型

  • 接收模型(推or拉)
    消息是由生产者推还是由消费者拉

消息投递可靠性

  • at-most-once(消息丢失)
    消息被投递0或者1次,消息可能被丢失

  • at-least-once(消息重复)
    消息可能被投递多次,直到收到ack,会造成消息重复。像rabbitmq开启消息持久化及ack机制,可以保证此投递策略,确保消息投递成功,但可能造成消息重复。

  • exactly-once(消息仅且投递一次)
    消息通过事务等机制保证对方能成功接收,而且不会重复接收

消息持久化

消费者是否可以接收离线时的消息

消息优先级

消息是否支持优先级

消息回溯

消息是否可以重复消费

redis做消息队列

发布订阅at-most-once需要自己支持

点对点模式需要自己通过list的lpush和brpop来模拟实现。
优先级队列可以用zset来实现

参考

03-05 19:51