.NET событийная шина, упрощающая взаимодействие между проектами, библиотеками, потоками, службами и т.д., делая код более простым и качественным.
30000+
сообщений в секунду10KB
Windows/Linux/MacOS
Install-Package Jaina
```- [.NET CLI](https://www.nuget.org/packages/Jaina)
```powershell
dotnet add package Jaina
У нас есть множество примеров на главной странице, вот один из первых:
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);
}
}
EventBus
в Startup.cs
:// Регистрация службы EventBus
services.AddEventBus(builder =>
{
// Регистрация подписчика событий ToDo
builder.AddSubscriber<ToDoEventSubscriber>();
// Регистрация через тип
builder.AddSubscriber(typeof(ToDoEventSubscriber));
// Батч-регистрация подписчиков событий
builder.AddSubscribers(ass1, ass2, ....);
});
info: Jaina.Samples.ToDoEventSubscriber[0]
Создание нового ToDo: Jaina
Вы можете найти документацию Jaina на главной странице.
Основная цель этого репозитория — продолжение развития ядра Jaina, чтобы сделать его быстрее и удобнее для использования. Разработка Jaina происходит открыто на Gitee, мы благодарим сообщество за предоставленные исправления ошибок и улучшения.
Jaina использует лицензию MIT.
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.