ASP.NET Core基于微软微服务eShopOnContainer事件总线EventBus的实现
这个EventBus的实现是基于微软微服务https://github.com/dotnet-architecture/eShopOnContainers项目的,我把它从项目中抽离出来,打包成nuget包方便大家快速集成到项目中
从Nuget.org中安装
PM> Install-Package Toosame.EventBus.RabbitMQ -Version 1.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是通过事件名找队列(一个队列对应一个微服务)
ASP.NET Core基于微软微服务eShopOnContainer事件总线EventBus的实现的更多相关文章
- Ubuntu & Docker & Consul & Fabio & ASP.NET Core 2.0 微服务跨平台实践
相关博文: Ubuntu 简单安装 Docker Mac OS.Ubuntu 安装及使用 Consul Consul 服务注册与服务发现 Fabio 安装和简单使用 阅读目录: Docker 运行 C ...
- Docker & Consul & Fabio & ASP.NET Core 2.0 微服务跨平台实践
相关博文: Ubuntu 简单安装 Docker Mac OS.Ubuntu 安装及使用 Consul Consul 服务注册与服务发现 Fabio 安装和简单使用 阅读目录: Docker 运行 C ...
- asp.net core 搭建WebAPI微服务-----cosnul服务
参考网址:https://blog.csdn.net/weixin_42084199/article/details/108643555 在此之前需要准备的是: vs2019,以往版本不支持dotne ...
- ASP.NET Core基于K8S的微服务电商案例实践--学习笔记
摘要 一个完整的电商项目微服务的实践过程,从选型.业务设计.架构设计到开发过程管理.以及上线运维的完整过程总结与剖析. 讲师介绍 产品需求介绍 纯线上商城 线上线下一体化 跨行业 跨商业模式 从0开始 ...
- ASP.NET Core 基于JWT的认证(二)
ASP.NET Core 基于JWT的认证(二) 上一节我们对 Jwt 的一些基础知识进行了一个简单的介绍,这一节我们将详细的讲解,本次我们将详细的介绍一下 Jwt在 .Net Core 上的实际运用 ...
- 在 ASP.NET Core 中执行租户服务
在 ASP.NET Core 中执行租户服务 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: http://gunna ...
- ASP.NET Core 2.0 : 五.服务是如何加载并运行的, Kestrel、配置与环境
"跨平台"后的ASP.Net Core是如何接收并处理请求的呢? 它的运行和处理机制和之前有什么不同? 本章从"宏观"到"微观"地看一下它的 ...
- ASP.NET Core 基于JWT的认证(一)
ASP.NET Core 基于JWT的认证(一) Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计 ...
- Asp.Net Core基于JWT认证的数据接口网关Demo
近日,应一位朋友的邀请写了个Asp.Net Core基于JWT认证的数据接口网关Demo.朋友自己开了个公司,接到的一个升级项目,客户要求用Aps.Net Core做数据网关服务且基于JWT认证实现对 ...
随机推荐
- 安装使用 superset
安装 superset 创建虚拟环境: python -m venv msuperset 激活虚拟环境: cd msuperset source bin/activate 安装 superset pi ...
- Java编程基础——数组和二维数组
Java编程基础——数组和二维数组 摘要:本文主要对数组和二维数组进行简要介绍. 数组 定义 数组可以理解成保存一组数的容器,而变量可以理解为保存一个数的容器. 数组是一种引用类型,用于保存一组相同类 ...
- docker操作命令大全和后台参数
一.命令行 可以通过运行 docker ,或者 docker help 命令得到命令行的帮助信息(我们以 CentOS 为操作环境为例): [root@iz2ze2bn5x2wqxdeq65wlpz ...
- MySQL整形手工注入
0x1 判断注入点: http://www.xxx.org/members.php?id=1 and 1=1 --+ # ture http://www.xxx.org/members.php?id= ...
- maven 学习---Maven配置之pom文件配置包含和排除测试
本文地址:http://blog.csdn.net/wirelessqa/article/details/14057083 包含(Inclusions )默认情况下Surefire Plugin会自动 ...
- JDBC学习笔记一
JDBC学习笔记一 JDBC全称 Java Database Connectivity,即数据库连接,它是一种可以执行SQL语句的Java API. ODBC全称 Open Database Conn ...
- [基础]Deep Learning的基础概念
目录 DNN CNN DNN VS CNN Example 卷积的好处why convolution? DCNN 卷积核移动的步长 stride 激活函数 active function 通道 cha ...
- PAT 乙级真题 1003 我要通过!题解
1003 我要通过! (20 分) “答案正确”是自动判题系统给出的最令人欢喜的回复.本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案 ...
- Dev-C++之调试
参考这个博客https://blog.csdn.net/qq_38737992/article/details/77621299,解决了问题
- 3. gn入门
Chromium是用gn和ninja进行编译的,即gn把.gn文件转换成.ninja文件,然后ninja根据.ninja文件将源码生成目标程序.gn和ninja的关系就与cmake和make的关系差不 ...