QsMessaging é uma biblioteca .NET 8 projetada para enviar e receber mensagens entre serviços ou componentes de sua aplicação usando RabbitMQ . Ele oferece suporte à escalabilidade horizontal, permitindo que várias instâncias do mesmo serviço manipulem mensagens com eficiência.
Disponível no NuGet para integração perfeita:
Uma solução de mensagens simples e escalável para sistemas distribuídos.
Instale o pacote usando o seguinte comando:
dotnet add package QsMessaging
Cadastrar a biblioteca é simples. Adicione as duas linhas de código a seguir ao seu Program.cs
:
// Add QsMessaging (use the default configuration)...
builder . Services . AddQsMessaging ( options => { } ) ;
.. .
await host . UseQsMessaging ( ) ;
CoelhoMQ
localhost
guest
guest
5672
Defina um contrato de mensagem:
public class RegularMessageContract
{
public required string MyTextMessage { get ; set ; }
}
Injete IQsMessaging
em sua classe:
public YourClass ( IQsMessaging qsMessaging ) { }
Em seguida, use-o para enviar uma mensagem:
await qsMessaging . SendMessageAsync ( new RegularMessageContract { MyTextMessage = "My message." } ) ;
Para lidar com a mensagem, crie um manipulador:
public class RegularMessageContractHandler : IQsMessageHandler < RegularMessageContract >
{
public Task < bool > Consumer ( RegularMessageContract contractModel )
{
// Process the message here
return Task . FromResult ( true ) ;
}
}
Você também pode usar o padrão Solicitação/Resposta para enviar uma solicitação e aguardar uma resposta. Isto é útil quando você precisa se comunicar entre serviços e esperar uma resposta.
Defina os contratos de solicitação e resposta:
public class MyRequestContract
{
public required string RequestMessage { get ; set ; }
}
public class MyResponseContract
{
public required string ResponseMessage { get ; set ; }
}
Para enviar uma solicitação e aguardar uma resposta, use o 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 ;
}
}
Para lidar com solicitações, implemente a interface 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 } ) ;
}
}
Isso é tudo, pessoal!
Para documentação detalhada, visite o Wiki QsMessaging.