Skip to content

Latest commit

 

History

History
201 lines (154 loc) · 5.98 KB

LEIAME.md

File metadata and controls

201 lines (154 loc) · 5.98 KB

Benner.Messaging

Benner.Messaging é uma biblioteca leve em .NET Standard para lidar com qualquer serviço de mensageria com facilidade. Benner.Messaging suporta RabbitMQ, ActiveMQ, Amazon SQS e Azure Queue. É uma biblioteca gratuita e aberta sob a licença MIT.

Estado de compilação

Branch Estado
master Build Status

Pacote Nuget

Nome do pacote .NET Framework .NET Standard
Benner.Messaging 4.6.1 2.0

Uma API de mensageria para todos conquistar!

Providenciamos uma API extremamente simples e intuitiva para envio e recebimento de mensagens para os serviços RabbitMQ, ActiveMQ, Amazon SQS e Azure Queue:

Messaging.Enqueue("nome-da-fila", "olá mundo!");
var mensagem = Messaging.Dequeue("nome-da-fila");

Sim, você entendeu certo! Você programa apenas uma vez, de modo muito simples, e utiliza o código em qualquer serviço de mensageria. Sem amarras tecnológicas, sem refatoração de código. Toda magia se baseia em configuração (de arquivo ou em código).

O comportamento importa

É importante notar que a API nasceu para funcionar de um modo específico:

  • Primeiro a entrar, primeiro a sair
  • Um produtor envia
  • Apenas um consumidor recebe
  • Se o consumo falhar no recebimento ou processamento, a mensagem retorna para a fila
  • A mensagem não será perdida

As operações de enfileirar e desenfileirar foram desenhadas para assegurar que uma mensagem enviada pelo produtor chegue no receptor. Isso significa que seguimos a abordagem "Publicador confirma" e "Consumidor reconhece" em todos os serviços suportados.

Como começar

Enviando mensagem

Crie um novo projeto:

dotnet new console -n producer
cd producer

Adicione Benner.Messaging e abra o projeto no VSCode:

dotnet add package benner.messaging
code .

Adicione using e envie uma única mensagem para alguma fila:

using Benner.Messaging;
Messaging.Enqueue("nome-da-fila", "olá mundo!");

É isso! Execute dotnet run e você obterá:

	Messaging config not found

Configuração dos serviços

Você vai precisar de um arquivo messaging.config como a seguir:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="MessagingConfigSection" type="Benner.Messaging.MessagingFileConfigSection, Benner.Messaging" />
  </configSections>
  <MessagingConfigSection>
    <queues>
      <queue name="teste" broker="RabbitMQ" />
    </queues>
    <brokerList default="RabbitMQ">
      <broker name="RabbitMQ" type="Benner.Messaging.RabbitMQConfig, Benner.Messaging">
        <add key="HostName" value="Servidor" />
        <add key="UserName" value="Usuario" />
        <add key="Password" value="Senha" />
      </broker>
    </brokerList>
  </MessagingConfigSection>
</configuration>

Você pode, como alternativa, injetar a configuração a partir de código:

var config = new MessagingConfigBuilder()
    .WithRabbitMQBroker("RabbitMQ", "servername", setAsDefault: true)
    .Create();

Messaging.Enqueue("nome-da-fila", "olá mundo!", config);

É isso! Execute dotnet run e você obterá:

	Unable to connect to RabbitMQ server

Providenciando um serviço

Você precisa, nesse caso, de um RabbitMQ em funcionamento.

Vamos usar um contêiner Docker para nos ajudar. Podemos executar o seguinte comando:

docker run -d -v rabbitmq_data:/var/lib/rabbitmq -p 15672:15672 -p 15671:15671 -p 5672:5672 -p 5671:5671 rabbitmq:3.7-management

Tudo pronto! Execute dotnet run novamente. Sem erros? Ótimo, e agora?

Acesse o gerenciador do seu RabbitMQ

Em seu navegador, acesse http://servername:15672/#/queues (usuário guest, senha guest) para gerenciar o serviço. Aqui você pode ver suas filas com suas mensagens dentro.

Recebendo uma mensagem

Crie um novo projeto:

dotnet new console -n consumer
cd consumer

Adicione Benner.Messaging e abra o projeto no VSCode:

dotnet add package benner.messaging
code .

Adicione using e receba uma mensagem da fila, sem esquecer da configuração:

using Benner.Messaging;

var config = new MessagingConfigBuilder()
    .WithRabbitMQBroker("RabbitMQ", "servername", setAsDefault: true)
    .Create();

var mensagem = Messaging.Dequeue("nome-da-fila", config);
Console.Write(mensagem);

É isso! Execute dotnet run e você receberá:

olá mundo! 

Agora vamos fazer isso insanamente

Mude o código do consumidor para:

using Benner.Messaging;

var config = new MessagingConfigBuilder()
    .WithRabbitMQBroker("RabbitMQ", "servername", setAsDefault: true)
    .Create();

using (var client = new Messaging(config))
{
    client.StartListening("queue-name", (e) =>
    {
        // Print the message
        Console.WriteLine(e.AsString);
        return true;
    });
    // Stand-by the application so it can keep listening
    Console.ReadKey();
}

Execute dotnet run em 3 terminais diferentes e você terá 3 consumidores simultâneos.

Mude o código do produtor para:

using Benner.Messaging;

var config = new MessagingConfigBuilder()
    .WithRabbitMQBroker("RabbitMQ", "servername", setAsDefault: true)
    .Create();

// Create new instance of messaging
using (var client = new Messaging(config))
{
    // Sending 1000 messages
    for (int i = 1; i <= 1000; i++)
        client.EnqueueMessage("queue-name", "hello world #" + i);
}

Execute dotnet run e você verá o que acontece.

Próximos passos

Veja os exemplos dos passos iniciais aqui.

Ous, veja mais detalhes aqui.