QsMessaging — это библиотека .NET 8, предназначенная для отправки и получения сообщений между службами или компонентами вашего приложения с помощью RabbitMQ . Он поддерживает горизонтальную масштабируемость, позволяя нескольким экземплярам одной и той же службы эффективно обрабатывать сообщения.
Доступно на NuGet для бесшовной интеграции:
Простое масштабируемое решение для обмена сообщениями для распределенных систем.
Установите пакет с помощью следующей команды:
dotnet add package QsMessaging
Зарегистрировать библиотеку очень просто. Добавьте следующие две строки кода в файл Program.cs
:
// Add QsMessaging (use the default configuration)...
builder . Services . AddQsMessaging ( options => { } ) ;
.. .
await host . UseQsMessaging ( ) ;
КроликMQ
localhost
guest
guest
5672
Определите контракт сообщения:
public class RegularMessageContract
{
public required string MyTextMessage { get ; set ; }
}
Внедрите IQsMessaging
в свой класс:
public YourClass ( IQsMessaging qsMessaging ) { }
Затем используйте его для отправки сообщения:
await qsMessaging . SendMessageAsync ( new RegularMessageContract { MyTextMessage = "My message." } ) ;
Для обработки сообщения создайте обработчик:
public class RegularMessageContractHandler : IQsMessageHandler < RegularMessageContract >
{
public Task < bool > Consumer ( RegularMessageContract contractModel )
{
// Process the message here
return Task . FromResult ( true ) ;
}
}
Вы также можете использовать шаблон запроса/ответа для отправки запроса и ожидания ответа. Это полезно, когда вам нужно обмениваться данными между службами и ожидать ответа.
Определите контракты запроса и ответа:
public class MyRequestContract
{
public required string RequestMessage { get ; set ; }
}
public class MyResponseContract
{
public required string ResponseMessage { get ; set ; }
}
Чтобы отправить запрос и дождаться ответа, используйте RequestResponse<TRequest, TResponse>
:
public class MyService
{
private readonly IQsMessaging _qsMessaging ;
public MyService ( IQsMessaging qsMessaging )
{
_qsMessaging = qsMessaging ;
}
public async Task < MyResponseContract > SendRequestAsync ( MyRequestContract request )
{
var response = await _qsMessaging . SendRequestResponseAsync < MyRequestContract , MyResponseContract > ( request ) ;
return response ;
}
}
Для обработки запросов реализуйте интерфейс IQsRequestResponseHandler<TRequest, TResponse>
:
public class MyRequestHandler : IQsRequestResponseHandler < MyRequestContract , MyResponseContract >
{
public Task < MyResponseContract > Handle ( MyRequestContract request )
{
// Process the request and create a response
return Task . FromResult ( new MyResponseContract { ResponseMessage = "Response to: " + request . RequestMessage } ) ;
}
}
Вот и все, ребята!
Подробную документацию можно найти на QsMessaging Wiki.