概述事件总线是一种事件发布/订阅结构,通过发布订阅模式可以解耦不同架构层级,同样它也可以来解决业务之间的耦合,它有以下优点
- 松耦合
- 横切关注点
- 可测试性
- 事件驱动
- 订阅者将自己关心的事件在调度中心进行注册
- 事件的发布者通过调度中心把事件发布出去
- 订阅者收到自己关心的事件变更并执行相对应业务
- 其中发布者无需知道订阅者是谁,订阅者彼此之间也互不认识,彼此之间互不干扰
- 进程内事件 (Event)
- 跨进程事件 (IntegrationEvent)
下面我们会用一个注册用户的例子来说明如何使用本地事件
入门
- 安装.NET 6.0
- 新建ASP.NET Core 空项目Assignment.InProcessEventBus,并安装Masa.Contrib.Dispatcher.Events
- 注册EventBus (用于发布本地事件), 修改Program.cs
- 新增RegisterUserEvent类并继承Event,用于发布注册用户事件
- 新增注册用户处理程序
public class UserHandler{ private readonly ILogger<UserHandler>? _logger; public UserHandler(ILogger<UserHandler>? logger = null) { //todo: 根据需要可在构造函数中注入其它服务 (需支持从DI获取) _logger = logger; } [EventHandler] public void RegisterUser(RegisterUserEvent @event) { //todo: 1. 编写注册用户业务 _logger?.LogDebug("-----------{Message}-----------", "检测用户是否存在并注册用户"); //todo: 2. 编写发送注册通知等 _logger?.LogDebug("-----------{Account} 注册成功 {Message}-----------", @event.Account, "发送邮件提示注册成功"); }}
注册用户的处理程序可以放到任意一个类中,但其构造函数参数必须支持从DI获取,且处理程序的方法仅支持 Task或 Void 两种, 不支持其它类型经验总结扩展阅读
- YC-Framework版本更新:V1.0.10
- 从 QFramework 重新开始
- reportportal 集成 robotframework 自动化执行及结果可视化
- MasaFramework -- 缓存入门与设计
- MasaFramework -- 缓存入门与规则配置
- MasaFramework -- 异常处理
- .Net Framework中的AppDomain.AssemblyResolve事件的常见用法、问题,以及解决办法
- net framework 3.5有什么用
- net40是什么