这个EventBus的实现是基于微软微服务https://github.com/dotnet-architecture/eShopOnContainers项目的,我把它从项目中抽离出来,打包成nuget包方便大家快速集成到项目中

从Nuget.org中安装

PM> Install-Package Toosame.EventBus.RabbitMQ -Version 1.1.2

使用

共3步:

  1. 添加事件
  2. 添加事件处理器
  3. 从控制器发布事件

1.添加事件

创建YourEvent.cs文件

1 public class YourEvent : IntegrationEvent
2 {
3 public string Name { get; set; }
4
5 public int Age { get; set; }
6 }

1.添加事件处理器

创建YourEventHandler.cs文件

 1 public class YourEventHandler : IIntegrationEventHandler<YourEvent>
2 {
3 private readonly IConfiguration _configuration;
4
5 public YourEventHandler(IConfiguration configuration){
6 //这里只是告诉你,可以使用依赖注入的服务.
7 _configuration = configuration;
8 }
9
10 public Task Handle(YourEvent @event)
11 {
12 //你可以拿到 @event.Name
13 //你可以拿到 @event.Age
14
15 //实现你自己的事件处理逻辑...
16
17 return Task.CompletedTask;
18 }
19 }

1.从控制器中发布事件

刚刚创建了一个事件,并且添加了事件处理器来处理事件,这里演示了如何发布事件;虽然刚刚添加了事件处理器,但是没有将事件处理器注册到ASP.NET Core中,下面的安装环境将演示如何注册。

 1 public class HomeController : Controller
2 {
3 private readonly IEventBus _eventBus;
4
5 public YourEventHandler(IEventBus eventBus){
6 _eventBus = eventBus;
7 }
8
9 [HttpGet]
10 public IAcionResult Index(){
11 _eventBus.Publish(new YourEvent(){
12 Name: "my name",
13 Age: 22
14 })
15 }
16 }

安装:注册事件和事件处理器

共2步:

  1.配置appsettings.json

  2.在Startup.cs中安装

1.配置appsettings.json

{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"RabbitMQ": {
"EventBusConnection": "<yourRabbitMqHost>[:port(default 5672)]",
"EventBusUserName": "<rabbitMqUserName>",
"EventBusPassword": "<rabbitMqPassword>",
"EventBusRetryCount": 5,
"EventBusBrokeName": "<rabbitMqExchangeName>",
"SubscriptionClientName": "<queueName>" //在微服务中,不同的微服务的应该是不同的名字
}
}

2.在Startup.cs中安装

经典安装:

 1 public void ConfigureServices(IServiceCollection services)
2 {
3 services.AddEventBus(Configuration.GetSection("RabbitMQ").Get<RabbitMQOption>(),
4 eventHandlers =>
5 {
6 eventHandlers.AddEventHandler<YourEventHandler1>();
7 eventHandlers.AddEventHandler<YourEventHandler2>();
8 });
9
10 services.AddMvc()
11 .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
12 }
13
14 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
15 {
16 app.UseEventBus(eventBus =>
17 {
18 eventBus.Subscribe<YourEvent1, YourEventHandler1>();
19 eventBus.Subscribe<YourEvent2, YourEventHandler2>();
20 });
21
22 app.UseMvc();
23 }

请把YourEvent和YourEventHandler换成你自己的事件和事件处理器

使用Autofac安装:

请先安装Autofac.Extensions.DependencyInjection这个包再使用以下代码

 1 public IServiceProvider ConfigureServices(IServiceCollection services)
2 {
3 services.AddMvc()
4 .SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
5 .AddControllersAsServices();
6
7 return services.AddEventBusAsAutofacService(Configuration.GetSection("RabbitMQ").Get<RabbitMQOption>(),
8 eventHandlers =>
9 {
10 eventHandlers.AddEventHandler<YourEventHandler1>();
11 eventHandlers.AddEventHandler<YourEventHandler2>();
12 });
13 }
14
15
16 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
17 {
18 app.UseEventBus(eventBus =>
19 {
20 eventBus.Subscribe<YourEvent1, YourEventHandler1>();
21 eventBus.Subscribe<YourEvent2, YourEventHandler2>();
22 });
23
24 app.UseMvc();
25 }

这样刚刚我们创建的EventHandler就能正常的收到事件了;

注意:不同微服务通过事件总线交换消息,Event的名字在不同的微服务项目中必须一致,因为RabbitMQ是通过事件名找队列(一个队列对应一个微服务)

项目github:https://github.com/lhdboy/Toosame.EventBus

 
 

ASP.NET Core基于微软微服务eShopOnContainer事件总线EventBus的实现的更多相关文章

  1. Ubuntu & Docker & Consul & Fabio & ASP.NET Core 2.0 微服务跨平台实践

    相关博文: Ubuntu 简单安装 Docker Mac OS.Ubuntu 安装及使用 Consul Consul 服务注册与服务发现 Fabio 安装和简单使用 阅读目录: Docker 运行 C ...

  2. Docker & Consul & Fabio & ASP.NET Core 2.0 微服务跨平台实践

    相关博文: Ubuntu 简单安装 Docker Mac OS.Ubuntu 安装及使用 Consul Consul 服务注册与服务发现 Fabio 安装和简单使用 阅读目录: Docker 运行 C ...

  3. asp.net core 搭建WebAPI微服务-----cosnul服务

    参考网址:https://blog.csdn.net/weixin_42084199/article/details/108643555 在此之前需要准备的是: vs2019,以往版本不支持dotne ...

  4. ASP.NET Core基于K8S的微服务电商案例实践--学习笔记

    摘要 一个完整的电商项目微服务的实践过程,从选型.业务设计.架构设计到开发过程管理.以及上线运维的完整过程总结与剖析. 讲师介绍 产品需求介绍 纯线上商城 线上线下一体化 跨行业 跨商业模式 从0开始 ...

  5. ASP.NET Core 基于JWT的认证(二)

    ASP.NET Core 基于JWT的认证(二) 上一节我们对 Jwt 的一些基础知识进行了一个简单的介绍,这一节我们将详细的讲解,本次我们将详细的介绍一下 Jwt在 .Net Core 上的实际运用 ...

  6. 在 ASP.NET Core 中执行租户服务

    在 ASP.NET Core 中执行租户服务 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: http://gunna ...

  7. ASP.NET Core 2.0 : 五.服务是如何加载并运行的, Kestrel、配置与环境

    "跨平台"后的ASP.Net Core是如何接收并处理请求的呢? 它的运行和处理机制和之前有什么不同? 本章从"宏观"到"微观"地看一下它的 ...

  8. ASP.NET Core 基于JWT的认证(一)

    ASP.NET Core 基于JWT的认证(一) Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计 ...

  9. Asp.Net Core基于JWT认证的数据接口网关Demo

    近日,应一位朋友的邀请写了个Asp.Net Core基于JWT认证的数据接口网关Demo.朋友自己开了个公司,接到的一个升级项目,客户要求用Aps.Net Core做数据网关服务且基于JWT认证实现对 ...

随机推荐

  1. sap和OA之间数值传递2(工程创建)

    1.创建project. 右击--new-other

  2. Python传入参数的几种方法

    写在前面 Python唯一支持的参数传递方式是『共享传参』(call by sharing) 多数面向对象语言都采用这一模式,包括Ruby.Smalltalk和Java(Java的引用类型是这样,基本 ...

  3. 在ie下转换时间戳出错

    在将特定格式转换为时间戳的时候,我们通常的做法事new Date(str).getTime(), 这个方法在谷歌上是可行的,但是在ie上需要注意一点,就是这个str如果是“2019-11-15”的格式 ...

  4. js中this由来

    这篇文章主要是讲述js中的this是什么?是怎么来的? 我们首先创建一个person对象,如下: var person = { name: 'wyh', age: 22, sayHi: functio ...

  5. 四.Windows基础

    系统目录 Windows Program files 用户 Perflogs:是Windows7的日志信息,如磁盘扫描错误信息,删掉可以,但不建议删,删掉反而降低系统速度,perflogs是系统自动生 ...

  6. ConstraintLayout 用法

    当前描述是基于constraint-layout:1.1.2. 一.前言 在以前,android是使用布局如LinearLayout .RelativeLayout等来构建页面,但这些布局使用起来很麻 ...

  7. Linux 性能优化排查工具

    下图1为 Linux 性能优化排查工具的总结 图1 诊断 CPU 工具 查看 CPU 核数 总核数 = 物理CPU个数 X 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU ...

  8. 【Linux】扩展阿里云数据盘分区和文件系统

    扩容云盘只是扩大存储容量,不会扩容文件系统 一.准备工作 在扩展数据盘扩展分区和文件系统前,请提前完成以下工作. 创建快照以备份数据,防止操作失误导致数据丢失. 通过ECS控制台或者API扩容云盘容量 ...

  9. InnoDB Multi-Versioning

    InnoDB 是一个数据多版本的存储引擎,它会保持它修改的数据的旧版本数据以此来支持事务特性,比如并发操作和事务的回滚.这些旧版本数据存储在一个叫做rollback segment的数据结构中(回滚段 ...

  10. Vue+ElementUI 安装与应用

    1.初始化创建一个vue项目: 打开终端输入命令 vue init webpack vueui ---------------------------------- ? Project name my ...