(文章目录) 前言 1.事件总线概念 事件总线是一种事件发布/订阅结构,通过发布订阅模式可以解耦不同架构层级,同样它也可以来解决业务之间的耦合,它有以下优点 松耦合 横切关注点
(文章目录)
前言
1.事件总线概念
事件总线是一种事件发布/订阅结构,通过发布订阅模式可以解耦不同架构层级,同样它也可以来解决业务之间的耦合,它有以下优点
- 松耦合
- 横切关注点
- 可测试性
- 事件驱动
事件总线类型
- 进程内事件 (Event):本地事件,它的发布与订阅需要在同一个进程中,订阅方与发布方需要在同一个项目中
- 跨进程事件 (IntegrationEvent):集成事件,它的发布与订阅一定不在同一个进程中,订阅方与发布方可以在同一个项目中,也可以在不同的项目中
2.发布-订阅概念
发布-订阅模式其实是一种对象间一对多的依赖关系,当一个对象的状态发送改变时,所有依赖于它的对象都将得到状态改变的通知。
订阅者(Subscriber)把自己想订阅的事件注册(Subscribe)到调度中心(Event Channel),当发布者(Publisher)发布该事件(Publish Event)到调度中心,也就是该事件触发时,由调度中心统一调度(Fire Event)订阅者注册到调度中心的处理代码。
本文主要介绍跨进程事件总线
一、.NET Core使用事件总线(跨进程事件总线)
1.安装包
Install-Package Masa.Contrib.Dispatcher.IntegrationEvents.Dapr
Install-Package Masa.Contrib.Dispatcher.IntegrationEvents.EventLogs.EFCore
Install-Package Masa.Contrib.Data.EFCore.Sqlite
Install-Package Masa.Contrib.Data.UoW.EFCore
Install-Package Masa.Contrib.Development.DaprStarter.AspNetCore
Install-Package Microsoft.EntityFrameworkCore.Design
2.数据库上下文
新建用户上下文类UserDbContext,并继承MasaDbContext
public class UserDbContext : MasaDbContext
{
public UserDbContext(MasaDbContextOptions<UserDbContext> options) : base(options)
{
}
}
3.Dapr的使用
Dapr提出了Sidecar(边车)的概念,在启动项目时再额外启动一个Sidecar, 通过Sidecar可以解决进程间通信,为此官方提供了两种部署方式:
- 自托管方式下运行Dapr
- 在 Kubernetes 模式中部署和运行 Dapr
注册DaprStarter, 协助管理Dapr Sidecar
if (builder.Environment.IsDevelopment())
{
builder.Services.AddDaprStarter();
}
4.注册跨进程事件总线
builder.Services.AddIntegrationEventBus(option =>
{
option.UseDapr()
.UseEventLog<UserDbContext>()
.UseUoW<UserDbContext>(optionBuilder => optionBuilder.UseSqlite($"Data Source=./Db/{Guid.NewGuid():N}.db;"));
});
var app = builder.Build();
#region dapr 订阅集成事件使用
app.UseRouting();
app.UseCloudEvents();
app.UseEndpoints(endpoints =>
{
endpoints.MapSubscribeHandler();
});
#endregion
待定。。。。。。。。。。。。。。。
【文章转自台湾大带宽服务器 http://www.558idc.com/tw.html提供,感恩】