这个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. Ansible varialbes

    1.什么是变量? ​ 以一个固定的字符串,表示一个不固定的值 version: 1.12 2.定义变量? 1.在playbook中定义变量? vars 关键字 [root@manager projec ...

  2. maven 学习---定制库到Maven本地资源库

    这里有2个案例,需要手动发出Maven命令包括一个 jar 到 Maven 的本地资源库. 要使用的 jar 不存在于 Maven 的中心储存库中. 您创建了一个自定义的 jar ,而另一个 Mave ...

  3. MySQL的select(极客时间学习笔记)

    查询语句 首先, 准备数据, 地址是: https://github.com/cystanford/sql_heros_data, 除了id以外, 24个字段的含义如下: 查询 查询分为单列查询, 多 ...

  4. GraphQL快速入门教程

    摘要: 体验神奇的GraphQL! 原文:GraphQL 入门详解 作者:MudOnTire Fundebug经授权转载,版权归原作者所有. GraphQL简介 定义 一种用于API调用的数据查询语言 ...

  5. packstack快速部署openstack

    环境准备 建议16GB RAM sed -i '/^SELINUX/s/enforcing/disabled/' /etc/selinux/config systemctl stop firewall ...

  6. Nginx虚拟主机配置(三)

    虚拟主机就是使用特殊的软硬件技术,把一台计算机主机分成多台“虚拟”的主机,每一台虚拟主机都具有独立的域名和IP地址(或共享的IP地址),具有完整的Internet服务器功能.在同一台硬件.同一个操作系 ...

  7. (day43)form表单、css

    目录 昨日回顾 一.HTTP协议 (一)四大特性 (二)数据格式 (1)请求格式 (2)响应格式 (三)响应状态码 二.HTML (一)什么是HTML (二)注释 (三)文档结构 (四)head内标签 ...

  8. matlab的plot3()函数、mesh()函数和surf()函数

    1.plot3()函数 例1:绘制一条空间折线. x=[0.2,1.8,2.5]; y=[1.3,2.8,1.1]; z=[0.4,1.2,1.6]; figure(1);plot3(x,y,z); ...

  9. [POJ2336]Ferry Loading II

    题目描述 Description Before bridges were common, ferries were used to transport cars across rivers. Rive ...

  10. zzulioj - 2600: 有多少天?

    题目链接:http://acm.zzuli.edu.cn/problem.php?id=2600 题目描述 小D同学对日期类的问题很是有兴趣,已知1900-01-01是星期一,那么小D想知道给定两个年 ...