Neste tutorial vamos criar uma aplicação em .net 5 que irá realizar o envio de um produto para uma fila no RabbitMq. Para isso, iremos utilizar um plugin chamado Mass Transit, que será capaz de enviar para o endpoint da fila os dados.
Ferramentas utilizadas:
- Docker
- RabbitMq
- Visual Studio 2019
- .Net 5
Primeiro, precisamos ter configurado em nossa máquina o docker. Caso você não tenha, clique neste link e acesse um tutorial completo sobre como configurar o mesmo.
Após esse processo, iremos criar um arquivo de docker-compose, que será responsável pela criação da nossa imagem do RabbitMq:
version: "3.2"
services:
rabbitmq:
image: rabbitmq:3-management-alpine
container_name: 'rabbitmq'
ports:
- 5672:5672
- 15672:15672
volumes:
- ~/.docker-conf/rabbitmq/data/:/var/lib/rabbitmq/
- ~/.docker-conf/rabbitmq/log/:/var/log/rabbitmq
networks:
- rabbitmq_go_net
networks:
rabbitmq_go_net:
driver: bridge
Vamos salvar esse arquivo com o nome e a seguinte extensão: docker-compose.yml
Agora iremos abrir o Visual Studio 2019, é importante já ter configurado e instalado o .NET 5 na sua máquina, caso não tenha clique neste link e acesse um tutorial sobre como configurar o ambiente.
Com o Visual Studio aberto, vamos criar um novo projeto:

Após esse processo, vamos selecionar o tipo de projeto:

Vamos inserir o nome da nossa aplicação:

Selecionar a versão do .NET 5 e o tipo Web API:

Após esse processo, vamos criar a classe de produto que será a nossa base de desenvolvimento:
public class Product
{
public int Id { get;set; }
public string Name { get; set; }
public decimal Price { get; set; }
public DateTime DateUpdatePrice { get; set; }
}
Neste momento, vamos instalar os pacotes do Mass Transit necessários para o desenvolvimento:
- Install-Package MassTransit -Version 7.2.1
- Install-Package MassTransit.RabbitMQ -Version 7.2.1
- Install-Package MassTransit.AspNetCore -Version 7.2.1
Vamos configurar dentro do Startup o nosso ambiente do RabbitMq:
services.AddMassTransit(cfg =>
{
cfg.UsingRabbitMq((context, config) =>
{
config.ReceiveEndpoint("product_queue", e => { });
config.Host("localhost", "/", h =>
{
h.Username("guest");
h.Password("guest");
});
});
});
services.AddMassTransitHostedService();
Repare que estamos utilizando o services, que já existe dentro do ambiente de ConfigureServices da nossa classe Startup padrão. Nele, estamos falando que o endpoint que será utilizado é o product_queue e também estamos informando qual o host, username e password do RabbitMq iremos utilizar. Por último, estamos instanciando o AssMassTransitHostedService.
Iremos criar nossa Controller de Product, primeiro vamos realizar a instanciação de duas classes no construtor:
private readonly ILogger<ProductController> _logger;
private readonly IBusControl _bus;
public ProductController(ILogger<ProductController> logger, IBusControl bus)
{
_logger = logger;
_bus = bus;
}
IBusControl é um componente do Mass Transit, será com ele que iremos realizar o Publish do nosso objeto para a fila. O ILogger é uma classe padrão que existe desde o aspnetcore 2.1 que nos ajuda a criar log do que aconteceu no nosso código. Iremos agora criar nossa Task:
[HttpPost]
public async Task<IActionResult> Post([FromBody] Product product)
{
await _bus.Publish<Product>(new Product { Id = product.Id, Name = product.Name, Price = product.Price });
var message = $"Message received. ProductId: { product.Id } in { DateTime.Now }";
_logger.LogInformation(message);
return Ok(message);
}
Recebemos o produto no body da chamada e realizamos então o envio par a fila, chamando o _bus do Mass Transit. Pronto, já temos nosso objeto na fila do RabbitMQ. No próximo post iremos realizar a configuração do Consumer, que irá consumir essa fila de tempos em tempos.
Para ter acesso ao código fonte desse tutorial: MassTransit-RabbitMq-Producer/MassTransit-RabbitMq-Producer at main · wenderdalber/MassTransit-RabbitMq-Producer (github.com)
Deixe um comentário