本项目是希望提供一个高可用、分布式、大容量、高性能、支持动态扩容的消息队列,目前很多的消息队列很多要么是单节点的,要么 是基于数据分片实现的比如kafka,无法做到动态扩容,而且节点下线后数据无法自动同步到其他节点,无法满足高可用的场景(而且kafka 需要自己维护队列的偏移,比如需要处理的数据在下线的节点上,那处理起来就比较麻烦,要么等下线节点上线,要么自己维护和合并多个偏移)。
这方面实现最好的应该是淘宝的 Notify 框架,可惜目前都没有开源,只有几篇介绍原理的文章,本项目部分参考了它来完成的。
主要实现了几个功能:动态集群管理、管理节点选举、消息的冗余存储、消息集合的划分、下线节点消息集合的同步(同步是基于集合来的) 、消息的处理(已处理消息集合列表已树形结构存储,会自动合并连续的区间,比如有1-100、102-200 集合的消息已处理,只会保存3 个节点,分别是根节点、1-100节点、102-200节点)
本项目分为3个子项目,OF.Notify 是框架的逻辑;OF.NotifyHost 中是 OF.Notify 的宿主站点(实际部署根据需要部署多个),里 面初始化一些配置信息以及Consumer,这个项目同时用于集群管理、存储和消费消息(Consumer 需要继承ConsumerBase即可);Mock 是 用于测试消息发送的Console项目,里面会模拟一个环境来宿主 OF.Notify 项目,用于测试了集群动态上下线、消息的发送、同步和处理的 情况,并且提供了方法检查各服务节点数据 正确性。