Jaina

.NET 事件总线
授权协议 Mulan
开发语言 C#
所属分类 服务器软件、 分布式应用/网格
软件类型 开源软件
地区 国产
投 递 者 归德厚
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Jaina

 nuget 

.NET 事件总线,简化项目、类库、线程、服务等之间的通信,代码更少,质量更好。‎

Jaina.drawio

源码解析

特性

  • 简化组件之间通信
    • 支持事件监视器
    • 支持动作执行器
    • 支持自定义消息存储组件
    • 支持自定义策略执行
    • 支持单消费、多消费消息
    • 支持消息幂等性处理
  • 高内聚,低耦合,使代码更简单
  • 非常快速,每秒可处理 30000 + 消息
  • 很小,仅 10KB
  • 无第三方依赖
  • 可在 Windows/Linux/MacOS 守护进程部署
  • 支持分布式、集群
  • 高质量代码和良好单元测试

安装

Install-Package Jaina
dotnet add package Jaina

快速入门

我们在主页上有不少例子,这是让您入门的第一个:

  1. 定义事件订阅者 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;
    }
}
  1. 创建控制器 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));
    }
}
  1.  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)
    {
        // ....
    }
}
  1. 运行项目:
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。 处理程序 在处理程序接收消息。你注册一个处理程序的地址。 很多不同的处理程序可以注册在