快捷搜索:  汽车  科技

redis消息队列订阅与发布(Redis应用一)

redis消息队列订阅与发布(Redis应用一)

Redis可以用作消息队列去处理一些后台的任务或者其他的消息任务。对此一个简单的实现,就是发布者将消息放入一个队列List中,然后等待消费者从这个队列中取出消息。其中,放入消息可以使用RPUSH命令。取出消息可以使用RPOP命令,或者使用BRPOP命令。当消息队列里没有消息时,BRPOP会锁住连接并等待一段时间。如果在等待时间内消息队列有消息被放入则返回,否则返回空。RPOP命令则会即时返回。

但是这样实现消息队列的一个问题是这个消息队列的消息可能会丢失。当Redis服务端执行RPOP命令或BRPOP命令后,相应消息会从消息队列中被移除。如果此时发生了网络波动,导致消息没有被送到消费者或者消费者的应用崩溃了,那么这个消息就丢失了。它既不存在于消息队列中,也不存在于消费者的处理队列中。

为了避免这个问题,通常的做法是建立一个新的消息队列存放在处理中的消息。当一个消息被消费者从消息队列取出时,不使用RPOP命令或者BRPOP命令,而是使用LMOVE命令或者BLMOVE命令将消息发送给消费者的同时,将消息移动到处理中列表里。当消费者完成对消息的处理后,使用LREM命令将该消息从处理中列表里移除。同时,消费者还应设置一个额外的监视器去将处理中列表里太长时间没有被移除的消息重新放回到消息队列里,以便重新处理。

redis消息队列订阅与发布(Redis应用一)(1)

消息队列

猜您喜欢: