每台机器将启动多个Woker进行超时消息消费,Woker即表示线程,定时消息被存储到Redis的多个Slot中,因此需要zookeeper维护集群中Woker与slot的关系,一个Slot只分配给一个Woker进行消费,一个Woker可以消费多个Slot。 Woker与Slot的关系在每台机器启动与停止时重新分配,超时消息消费集群监听了zookeeper节点的变化。 Woker与Slot关系确定后,Woker则循环不断地从Redis拉取订阅的Slot中的超时消息。 在StoreQueue存储设计中说明了定时消息存储时采用Sorted S et结构,采用定时时间actionTime作为分数,因此定时消息按照时间大小存储在Sorted Set中。 因此在拉取超时消息进行只需采用Redis命令ZRANGEBYSCORE弹出分数小于当前时间戳的一条消息。 为了保证系统的可用性,还需要考虑保证定时消息至少被消费一次以及消费的重试次数。答复内容摘自《2021技术人的百宝黑皮书》,这本电子书收录开发者藏经阁 下载连接:https://developer.aliyun.com/ebook/download/7436
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。