.NET 事件总线,简化项目、类库、线程、服务等之间的通信,代码更少,质量更好。
30000 +
消息10KB
Windows/Linux/MacOS
守护进程部署Install-Package Jaina
dotnet add package Jaina
我们在主页上有不少例子,这是让您入门的第一个:
ToDoEventSubscriber
:// 实现 IEventSubscriber 接口 public class ToDoEventSubscriber : IEventSubscriber { private readonly ILogger<ToDoEventSubscriber> _logger; public ToDoEventSubscriber(ILogger<ToDoEventSubscriber> logger) { _logger = logger; } // 标记 [EventSubscribe(事件 Id)] 特性 [EventSubscribe("ToDo:Create")] // [EventSubscribe("ToDo:CreateOrUpdate")] // 支持多个 public async Task CreateToDo(EventHandlerExecutingContext context) { var todo = context.Source; _logger.LogInformation("创建一个 ToDo:{Name}", todo.Payload); await Task.CompletedTask; } }
ToDoController
,依赖注入 IEventPublisher
服务:[Route("api/[controller]/[action]")] [ApiController] public class ToDoController : ControllerBase { // 依赖注入事件发布者 IEventPublisher private readonly IEventPublisher _eventPublisher; public ToDoController(IEventPublisher eventPublisher) { _eventPublisher = eventPublisher; } // 发布 ToDo:Create 消息 [HttpPost] public async Task CreateDoTo(string name) { await _eventPublisher.PublishAsync(new ChannelEventSource("ToDo:Create", name)); } }
Startup.cs
注册 EventBus
服务:public class Startup { public void ConfigureServices(IServiceCollection services) { // 注册 EventBus 服务 services.AddEventBus(buidler => { // 注册 ToDo 事件订阅者 buidler.AddSubscriber<ToDoEventSubscriber>(); }); // .... } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // .... } }
info: Jaina.Samples.ToDoEventSubscriber[0] 创建一个 ToDo:Jaina
您可以在主页找到 Jaina 文档。
该存储库的主要目的是继续发展 Jaina 核心,使其更快、更易于使用。Jaina 的开发在 Gitee 上公开进行,我们感谢社区贡献错误修复和改进。
Jaina 采用 MulanPSL-2.0 开源许可证。
Copyright (c) 2020-2021 百小僧, Baiqian Co.,Ltd. Jaina is licensed under Mulan PSL v2. You can use this software according to the terms andconditions of the Mulan PSL v2. You may obtain a copy of Mulan PSL v2 at: https://gitee.com/dotnetchina/Jaina/blob/master/LICENSE THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUTWARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. See the Mulan PSL v2 for more details.
让我们跳进 API 获取事件总线 你获取到事件总线的引用,如下所示: EventBus eb = vertx.eventBus(); 还有每个 Vert.x 实例事件总线的单个实例。 注册处理程序 这个最简单的方法来注册一个处理程序用consumer。下面是一个示例: EventBus eb = vertx.eventBus(); eb.consumer("news.uk.sport", mess
注:本节未经校验,如有问题欢迎提issue 最初设想是为了提供一种向多个actor群发消息的方法,之后EventBus被一般化为一组实现一个简单接口的可组合的特质: /** * Attempts to register the subscriber to the specified Classifier * @return true if successful and false if not
背景 JDK中通过Observer接口和Observable类实现观察者模式, Observer对象是观察者,Observable对象是被观察者. 实现一个简单的观察者模式有以下几步: 创建被观察者, 继承自java.util.Observable类 创建观察者, 实现java.util.Observer接口 在观察者中实现void update(java.util.Observable obse
我在CQRS/ES设计中有一个计时案例。为了便于讨论,让我们以Microsoft关于这个主题的示例会议管理为基础(https://msdn.microsoft.com/en-us/library/jj554200.aspx)。 假设在第1分钟创建会议(最大座位数为20)。 在第4分钟,事件到达order mgmt上下文,因此创建了一个座位可用性。 在第7分钟,用户下了一个订单(通过订单管理),购买
event bus是Vert.x 的中枢神经系统 。 通过Vert.x实例使用eventBus方法得到单一的event bus实例。 事件总线允许您的应用程序相互沟通,不论何种语言,他们写的以及他们是否在同一个 Vert.x 实例,或在一个不同的 Vert.x 实例的不同部分。 它甚至可以弥合,允许客户端 JavaScript 运行在浏览器上相同的事件总线进行通信。 事件总线构成了一个分布式对等消
6.6 ABP表现层 - 事件总线 6.6.6.1 简介 Pub/Sub 事件模型被广泛的应用在客户端。ABP包含了一个 简单的全局事件总线 用来注册事件并且触发事件。 6.6.6.2 注册事件 你可以使用 abp.event.on 来 注册 一个 全局事件 。示例如下: abp.event.on('itemAddedToBasket', function (item) { console
我在一个库中有一个带注释的Activity,它是来自同一个库的EventBus事件的订阅者。它看起来像这样,大大简化了: 它应该根据这个来工作: http://timnew.me/blog/2014/09/14/otto-and-android-annotations-compatibility-issue-analysis/ 但实际上它返回了此错误: 无法开始活动...de . green ro
处理 事件到地址总线上发送邮件. Vert.x 并不费心处理计划任何幻想。在 Vert.x 的地址是只是一个字符串。任何字符串是有效的。然而它是计划的明智地使用某种类型,例如使用句点划定一个命名空间。 一些例子的有效地址是 europe.news.feed1、 acme.games.pacman、 香肠和 X。 处理程序 在处理程序接收消息。你注册一个处理程序的地址。 很多不同的处理程序可以注册在