1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/dotnetchina-Jaina

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Jaina

Лицензия NuGet DotNet China

.NET событийная шина, упрощающая взаимодействие между проектами, библиотеками, потоками, службами и т.д., делая код более простым и качественным.

Jaina.drawio

Исходный код

Основные характеристики

  • Упрощение взаимодействия компонентов
    • Поддержка монитора событий
    • Поддержка исполнителя действий
    • Поддержка пользовательских компонентов хранения сообщений
    • Поддержка пользовательской стратегии выполнения
    • Поддержка одноразового и многоразового потребления сообщений
    • Поддержка атомарной обработки сообщений
  • Высокая внутренняя связность и низкая внешняя зависимость, что делает код проще
  • Очень быстрый, способен обрабатывать до 30000+ сообщений в секунду
  • Небольшой размер, всего 10KB
  • Отсутствие сторонних зависимостей
  • Может использоваться как демон на Windows/Linux/MacOS
  • Поддерживает распределённые и кластерные системы
  • Высокое качество кода и хорошие юнит-тесты

Установка

Install-Package Jaina
```- [.NET CLI](https://www.nuget.org/packages/Jaina)

```powershell
dotnet add package Jaina

Быстрый старт

У нас есть множество примеров на главной странице, вот один из первых:

  1. Определите подписчика событий ToDoEventSubscriber:
// Реализует интерфейс IEventSubscriber
public class ToDoEventSubscriber : IEventSubscriber
{
    private readonly ILogger<ToDoEventSubscriber> _logger;

    public ToDoEventSubscriber(ILogger<ToDoEventSubscriber> logger)
    {
        _logger = logger;
    }

    [EventSubscribe("ToDo:Create")] // Поддерживает несколько подписок
    [EventSubscribe(YourEnum.Message)]   // Поддерживает использование enum
    public async Task CreateToDo(EventHandlerExecutingContext context)
    {
        var todo = context.Source;
        _logger.LogInformation("Создание нового ToDo: {Name}", todo.Payload);
        await Task.CompletedTask;
    }

    // Поддерживает enum типы
    [EventSubscribe(YourEnum.Some)]
    public async Task EnumHandler(EventHandlerExecutingContext context)
    {
        var eventEnum = context.Source.EventId.ParseToEnum(); // Преобразование ID события в объект enum
        await Task.CompletedTask;
    }

Поддержка регулярных выражений для соответствия:

// Поддержка регулярных выражений для соответствия
[EventSubscribe("(^1[3456789][0-9]{9}$)|((^[0-9]{3,4}-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^([0-9]{3,4})[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$))", FuzzyMatch = true)]
public async Task RegexHandler(EventHandlerExecutingContext context)
{
    var eventId = context.Source.EventId;
    await Task.CompletedTask;
}

Поддержка различных конфигураций повторной попытки при возникновении ошибок:```csharp // Поддержка различных конфигураций повторной попытки при возникновении ошибок [EventSubscribe("test:error", NumRetries = 3)] [EventSubscribe("test:error", NumRetries = 3, RetryTimeout = 1000)] // Интервал времени между повторными попытками [EventSubscribe("test:error", NumRetries = 3, ExceptionTypes = new[] { typeof(ArgumentException) })] // Повторная попытка только для конкретных типов исключений public async Task ExceptionHandler(EventHandlerExecutingContext context) { var eventId = context.Source.EventId; await Task.CompletedTask; }

```2. Создание контроллера `ToDoController`, используя зависимость внедрения сервиса `IEventPublisher`:

```cs
public class ToDoController : ControllerBase
{
    // Внедрение зависимости сервиса IEventPublisher
    private readonly IEventPublisher _eventPublisher;

    public ToDoController(IEventPublisher eventPublisher)
    {
        _eventPublisher = eventPublisher;
    }

    // Отправка сообщения ToDo:Create
    public async Task CreateDoTo(string name)
    {
        await _eventPublisher.PublishAsync(new ChannelEventSource("ToDo:Create", name));
        // Упрощённая версия
        await _eventPublisher.PublishAsync("ToDo:Create", name);
    }
}
  1. Регистрация службы EventBus в Startup.cs:
// Регистрация службы EventBus
services.AddEventBus(builder =>
{
    // Регистрация подписчика событий ToDo
    builder.AddSubscriber<ToDoEventSubscriber>();

    // Регистрация через тип
    builder.AddSubscriber(typeof(ToDoEventSubscriber));

    // Батч-регистрация подписчиков событий
    builder.AddSubscribers(ass1, ass2, ....);
});
  1. Запуск проекта:
info: Jaina.Samples.ToDoEventSubscriber[0] 
      Создание нового ToDo: Jaina

Дополнительная документация

Документация

Вы можете найти документацию Jaina на главной странице.

Контрибуция

Основная цель этого репозитория — продолжение развития ядра Jaina, чтобы сделать его быстрее и удобнее для использования. Разработка Jaina происходит открыто на Gitee, мы благодарим сообщество за предоставленные исправления ошибок и улучшения.

Лицензия

Jaina использует лицензию MIT.

Введение

.NET шина событий, упрощающая коммуникацию между проектами, библиотеками, потоками и службами, меньше кода, выше качество. Развернуть Свернуть
C#
MIT
Отмена

Обновления (6)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/dotnetchina-Jaina.git
git@api.gitlife.ru:oschina-mirror/dotnetchina-Jaina.git
oschina-mirror
dotnetchina-Jaina
dotnetchina-Jaina
net6