一般来说,消息队列有两种模式,一种是发布者订阅模式,另外一种是生产者和消费者模式。Redis的消息队列,也是基于这2种原理的实现。
发布者和订阅者模式:发布者发送消息到队列,每个订阅者都能收到一样的消息。
生产者和消费者模式:生产者将消息放入队列,多个消费者共同监听,谁先抢到资源,谁就从队列中取走消息去处理。注意,每个消息只能最多被一个消费者接收。
用过的消息队列有RabbitMQ,gearman, 个人觉得RabbitMQ这种消息队列太大太重,而gearman缓存不可持久化,而redis很好的解决了这个问题,但是redis如果只部署单点模式下,队列一旦崩溃程序将出现异常,能否实现多台单点部署,并实现负载均衡呢,答案是肯定的。 以下是个人实现的在多个单点redis模式下,实现消息复杂均衡,并实现对worker存活的实时监控。但是由于php实现的,在心跳方面比较薄弱,只适合消费耗时比较短的任务模式,如果消耗时间太长,可能出现错误判断。