EBCEYS.RabbitMQ.Server.MappedService
1.5.1
dotnet add package EBCEYS.RabbitMQ.Server.MappedService --version 1.5.1
NuGet\Install-Package EBCEYS.RabbitMQ.Server.MappedService -Version 1.5.1
<PackageReference Include="EBCEYS.RabbitMQ.Server.MappedService" Version="1.5.1" />
<PackageVersion Include="EBCEYS.RabbitMQ.Server.MappedService" Version="1.5.1" />
<PackageReference Include="EBCEYS.RabbitMQ.Server.MappedService" />
paket add EBCEYS.RabbitMQ.Server.MappedService --version 1.5.1
#r "nuget: EBCEYS.RabbitMQ.Server.MappedService, 1.5.1"
#addin nuget:?package=EBCEYS.RabbitMQ.Server.MappedService&version=1.5.1
#tool nuget:?package=EBCEYS.RabbitMQ.Server.MappedService&version=1.5.1
EBCEYS.RabbitMQ
Описание
Библиотека для работы с брокером сообщений RabbitMQ.
EBCEYS.RabbitMQ.Client
Реализация publisher-a для работы с брокером сообщений RabbitMQ.
Через клиент, в зависимости от конфигурации, возможна отправка сообщений и "RPC" запросов.
Для отправки сообщений используется метод SendMessageAsync.
Для отправки "RPC" запросов используется метод SendRequestAsync.
EBCEYS.RabbitMQ.Server.MappedService.SmartController
Аналогичен RabbitMQControllerBase
, только внутри себя содержит "сервер", принимающий сообщения из брокера.
Пример использования:
private static RabbitMQConfigurationBuilder? configBuilder;
public static void Main(string[] args)
{
configBuilder = new();
configBuilder.AddConnectionFactory(new()
{
HostName = "Kuznetsovy-Server",
UserName = "ebcey1",
Password = "123"
});
configBuilder.AddQueueConfiguration(new("ExampleQueue", autoDelete: true));
Logger logger = LogManager.Setup().LoadConfigurationFromFile("nlog.config").GetCurrentClassLogger();
IHost host = Host.CreateDefaultBuilder(args)
.ConfigureServices(services =>
{
services.AddSmartRabbitMQController<TestController>(configBuilder.Build());
})
.UseNLog()
.ConfigureLogging(log =>
{
log.ClearProviders();
log.AddNLog("nlog.config");
})
.Build();
host.Run();
}
internal class TestController : RabbitMQSmartControllerBase
{
private readonly ILogger<TestController> logger;
public TestController(ILogger<TestController> logger)
{
this.logger = logger ?? throw new ArgumentNullException(nameof(logger));
}
[RabbitMQMethod("ExampleMethod")]
public Task<string> TestMethod2(string a, string b)
{
logger.LogInformation("TestMethod2 get command with args: a: {a}\tb: {b}", a, b);
return Task.FromResult(a + b);
}
}
EBCEYS.RabbitMQ.Server.MappedService.RabbitMQServer
Реализация consumer-a как IHostedService.
Стоит отметить что в данном случае consumer всегда будет асинхронный.
EBCEYS.RabbitMQ.Server.MappedService.RabbitMQMappedServer !!! УСТАРЕЛО !!!
Попытка реализации сервиса consumer-a через контроллеры (а-ля ControllerBase для http).
Методы контроллера должны быть асинхронными.
Пример конфигурации:
configBuilder = new();
configBuilder.AddConnectionFactory(new()
{
HostName = "Kuznetsovy-Server",
UserName = "ebcey1",
Password = "123"
});
configBuilder.AddQueueConfiguration(new("ExampleQueue", autoDelete: true));
RabbitMQConfiguration config = configBuilder.Build();
IHost host = Host.CreateDefaultBuilder(args)
.UseNLog()
.ConfigureLogging(log =>
{
log.AddNLog("nlog.config");
})
.ConfigureServices(services =>
{
services.AddRabbitMQController<ExampleController>();
services.AddRabbitMQMappedServer(config);
})
.Build();
host.Run();
Изменения
v1.5.1
- Передача заголовка о наличии компрессии в сообщениях от клиента
- Автоматическое определение наличия компрессии сообщения на уровне контроллера при приеме сообщения
v1.5.0
- Добавлена возможность настройки GZip компрессии/декомпрессии отправляемых сообщений.
- В
CallbackRabbitMQConfiguration
добавлена конфигурация ожидания ответа на запрос. - Для
RabbitMQClient
добавлены новые конструкторы, а старые УДАЛЕНЫ. AddRabbitMQClient
дляIServiceCollection
УБРАНА старая реализация с указанием таймаута через параметр. Таймаут теперь указывается вCallbackRabbitMQConfiguration
.- Добавлены описания для публичных методов.
- Исправлена ошибка, когда
RabbitMQSmartController
не обрабатывал сообщения в выбранной кодировке, а только в UTF-8. - Добавлена возможность добавлять в
IServiceColletion
свою реализациюRabbitMQClient
- Добавлена возможность добавлять в
IServiceColletion
свою реализациюRabbitMQServer
v1.4.2
- Исправлена передача исключений.
- Добавлена конфигурация старта сервисов.
- Добавлена опция для клиента, не выбрасывать серверные исключения из ответа на запрос.
- Логи отправки и приема сообщений переведены на уровень Trace.
v1.4.1
- Добавлена конфигурация QoS [опционально] при старте клиента и сервера.
- Добавлен вариант передачи исключений. Для этого следует использовать
RabbitMQRequestProcessingException
внутри метода контроллера. Если клиент получит ответ с подобным исключением, то выкинет его в методеSendRequestAsync
. - В конфигурацию
RabbitMQConfiguration
добавлена возможность передачи кодировки. По умолчанию используется UTF-8.
v1.4.0
Фичи:
- Библиотека переведена на 8-ой дотнет.
- Обновлены используемые пакеты.
- Инициализация подключения, создание канала и консумера вынесены в старт сервиса
IHostedService.StartAsync(CancellationToken cancellationToken)
. - Добавлены поддерживаемые типы обменников как enum-ы (опционально, можно передавать по старому как строку).
- В конфигурацию добавлены параметры установки канала.
- В репозиторий добавлены примеры использования в докере. Через сервис ExampleDockerClient можно отправить сообщения и запросы на сервис ExampleDockerServer.
- При создании
RabbitMQSmartController
теперь берется не первый конструктор, а первый подходящий по сервисам вIServiceProvider
. Если ни один конструктор не подошел, то пытаемся создать безе парамметров. - Добавлена поддержка topic обменников.
- Консумеры AutoAck.
- Добавлена конфигурация для callback обменника и очереди.
Фиксы:
- Исправлена ошибка, когда очередь не привязывалась к обменнику.
v1.3.1
- Методы SendMessage и SendRequest у RabbitMQClient-a сделаны вирутальными чтобы их можно было замокать.
- Инициализация подключения к RabbitMQ теперь будет происходить на стадии запуска сервиса.
v1.3.0
- Добавлен новый тип контроллера
RabbitMQSmartController
. Данный контроллер содержит в себе сервер, принимающий сообщения из брокера сообщений и вызывающий методы, указанные внутри сообщения.
v1.2.0
- Так как использование Microsoft.Text.Json вызывало ошибки в работе контроллера - было принято решение перейти на Newtownsoft.Json.
- В случае если возникли ошибки во время обработки сообщения/запроса, сообщение будет приниматься.
v1.1.6
- Исправлена ошибка, когда, при атрибутах метода string, некорректно парсились параметры запроса в контроллере.
v1.1.5
- Добавил простые конструкторы для конфигурации.
v1.1.4
- В ServiceCollectionExtensions добавлен метод для добавления RabbitMQClient-a.
v1.1.3
- Переделаны контроллеры. Теперь они scoped.
- Убран метод FixRabbitMQControllers для IServiceCollection
v1.1.2
- Исправлена ошибка, когда при использовании метода AddRabbitMQController, MappedServer мог не видеть контроллеры.
v1.1.1 Большая переработка проекта
Фичи:
- Добавил проекты с примерами работы клиента и сервера;
- Добавил базовый интерфейс для контроллера;
- Добавил методы расширения IServiceCollection, через который идет настройка сервера и контроллеров;
- RabbitMQMappedServer теперь не требует сервиса самого сервера, а инициирует его сам.
- Убрал кучу лишних конструкторов;
- Добавил дебаг логирование в сервисы;
Фиксы:
- Исправлена ошибка, когда таймаут ожидания ответа на запрос учитывался в миллисекундах.
- Исправлена ошибка, когда не стартовал ресивер, если в настройках не указать, что он асинхронный;
- Исправил ошибку, когда при отправке ответа на запрос, MappedServer выдавал исключение.
v1.0.4
- Изменил алгоритм работы при остановке сервиса. Теперь только закрывает соединение.
- Добавил реализацию клиента (EBCEYS.RabbitMQ.Client). Через него возможна отправка сообщений и запросов на контроллеры.
v1.0.3
- Переименовал атрибут для методов RabbitMQ (RabbitMQMethodName → RabbitMQMethod).
- Исправил недоработку когда для парсинга сообщения в ресивере не использовались SerializerOptions.
- Добавил тесты для тестирования в своей среде (во время CI/CD запускаться не будут).
Планы на развитие
- Дебаг в зависимости от найденных ошибок / отзывов.
- Добавить Stream обмен.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. |
-
net8.0
- Microsoft.Extensions.Hosting.Abstractions (>= 9.0.1)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.1)
- Newtonsoft.Json (>= 13.0.3)
- RabbitMQ.Client (>= 7.1.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.5.1 | 82 | 2/28/2025 |
1.5.0 | 85 | 2/28/2025 |
1.4.2 | 99 | 1/30/2025 |
1.4.1 | 79 | 1/24/2025 |
1.4.0 | 76 | 1/16/2025 |
1.3.1 | 212 | 8/8/2023 |
1.3.0 | 163 | 6/26/2023 |
1.2.0 | 235 | 3/14/2023 |
1.1.6 | 232 | 3/14/2023 |
1.1.5 | 229 | 3/14/2023 |
1.1.4 | 246 | 3/13/2023 |
1.1.3 | 251 | 3/5/2023 |
1.1.2 | 254 | 3/4/2023 |
1.1.1 | 242 | 3/4/2023 |
1.0.4 | 258 | 2/27/2023 |
1.0.3 | 259 | 2/26/2023 |
1.0.2 | 267 | 2/23/2023 |
1.0.1 | 262 | 2/23/2023 |
1.0.0 | 273 | 2/23/2023 |