那为了使用延迟队列而去部署一套RabbitMq成本有点大;
使用Java中的延迟队列,DelayQueue
优点: java.util.concurrent包下一个延迟队列,简单易用;拿来即用
缺点: 单机、不能持久化...通过BLPOP阻塞,我们避免了频繁的去请求redis,并且更重要的是提高了实时性;
2.批量获取的数量和消费线程池的阻塞队列
执行上面的一次获取N个元素是不定的,这个要看线程池的maxPoolSize...,做不到消息完全不丢失,如果要保证完成不丢失,Redis的持久化刷盘策略要收紧
因为Codis不能使用BLPOP这种阻塞的形式,在获取消费任务的时候用了每秒一次去获取,有点浪费性能;
支持消费者多实例部署...,但是可能存在不能均匀的分配到每台机器上去消费;
虽然支持redis集群,但是其实是伪集群,因为Lua脚本的原因,让他们都只能落在一台机器上;
总结
实时性
正常情况下 消费的时间误差不超过1秒钟;...极端情况下,一台实例宕机,另外的实例nextTime很迟; 那么最大误差是1分钟; 真正的误差来自于业务方的接口的消费速度
QPS
完全视业务方的消费速度而定; 延迟队列不是瓶颈
发布者:全栈程序员栈长