本文主要围绕RabbitMQ消息队列和EventBus事件总线做笔记,其中有很多自己的理解和观点,有不对之处还望大神指出,我也学习一下。
1,消息队列
什么是消息队列就不说了,这里只介绍为什么用它!!!
RabbitMQ提供了可靠的消息机制、跟踪机制和灵活的消息路由,支持消息集群和分布式部署。适用于排队算法、秒杀活动、消息分发、异步处理、数据同步、处理耗时任务、CQRS等应用场景。它的以上好处在高并发等三高场景是十分必要的。
前提:使用RabbitMQ必须考虑高可用性
1、高可用:如果使用消息队列,基本要配合集群的,因为如果MQ服务器崩了,那就整个服务灾难了。
2、数据安全:必须保证数据不能丢失,也就是要考虑好最终一致性,做好补偿机制。
3、合理的消费。
2,事件总线
事件总线是对发布-订阅模式的一种实现。它是一种集中式事件处理机制,允许不同的组件之间进行彼此通信而又不需要相互依赖,达到一种解耦的目的。
说人话就是:集中对消息队列中处理的事件进行订阅和绑定管理。
实现事件总线的关键是:
事件总线维护一个事件源与事件处理的映射字典;
通过单例模式,确保事件总线的唯一入口;
利用反射完成事件源与事件处理的初始化绑定;
提供统一的事件注册、取消注册和触发接口;
上边就是一个简单的事件总线管理类,主要任务就是对一个事件源与事件处理的映射,包括事件处理程序的触发。
3,事件源+事件处理
为了集中对事件进行处理,就需要进一步提取基类来处理,如下所示:
然后还需要声明一个事件基类来传递数据信息,这里声明一个强类型的带数据的事件
到这里关于事件总线的设计就初步完成了,接下来是关于消息队列 发布+订阅的设计。
作者:PeterZhang
出处:https://www.cnblogs.com/peterzhang123
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。