Criando um microsserviço

Aprenda nesse momento como desenvolver o primeiro microsseriço em 30 minutos pronto para produção utilizando o Devprime CLI, Devprime Stack e projeto moderno de arquitetura de software e aceleradores que aumentam a produtividade e padronizam o desenvolvimento.

Hoje você vai aprender na prática a utilizar a plataforma Devprime para acelerar o desenvolvimento do primeiro microsserviço. Nós utilizaremos o Devprime CLI que é a ferramenta da Devprime para o desenvolvedor com o comando ‘dp new’. Ao executar esse comando, uma nova aplicação é criada em questão de segundos, incluindo um projeto completo de arquitetura de software e está pronta para produção. Esse processo economiza muito tempo em comparação com a criação convencional, que normalmente levaria semanas.

Para o ambiente local será utilizado o serviço de Stream ‘RabbitMQ’ para emissão de eventos e comunicação assíncrona, alinhando-se com nossa abordagem de ‘Event-Driven Architecture’ e para o banco de dados, optamos pelo ‘MongoDB’ e faremos a integração usando o Adapter de State.

Cheklist e preperação do ambiente inicial:

Criando o primeiro microsserviço
Os novos projetos são criados utilizando o comando dp new com parâmetros para a definição do Stream, que pode variar entre RabbitMQ, Kafka e outras opções, e do State, que pode variar entre MongoDB, MySQL, SQL Server e outras escolhas.

Para iniciar um novo projeto de microsserviço, execute o comando abaixo, definindo o nome do microsserviço como “ms-order” e especifique os parâmetros para RabbitMQ e MongoDB:

1
dp new ms-order --stream rabbitmq --state mongodb

Este comando criará um novo microsserviço chamado “ms-order” com as configurações apropriadas para utilizar o RabbitMQ no Stream e o MongoDB no State.

Devprime Version

Seu novo microsserviço está pronto para produção

Para acessar o novo projeto, entre na pasta criada e abra pelo Visual Studio Code para visualizar a arquietura de software implementada, funcionalidades habilitadas pelos aceleradores e componentes da plataforma Devprime.

1
code .

As configurações dos recursos oferecidas pelo Devprime Stack estão disponíveis no arquivo appsettings (src\App\appsettings.json) e podem ser configuradas por meio de variáveis de ambiente no container e um cofre vault no ambiente de produção.

O projeto segue uma abordagem de arquitetura de Hexagonal separando as camadas de tecnologia da seguinte forma:

  • APP: O projeto principal da sua aplicação e o padrão para abrir no Visual Studio.
  • Domain: As regras de negócio baseiam-se no Domain-Driven Design (DDD) e ficam isoladas nesse projeto. Todas as classes de domínio devem herdar de classes do Devprime Foundation (AggRoot, Entity, ValueObject).
  • Web: Adaptador para exposição das APIs.
  • Stream: Adaptador com implementação para receber eventos multistream (RabbitMQ, Kafka, etc.).
  • State: Adaptador com integração com plataformas de persistência (MongoDB, SQLServer, PostgreSQL, etc.).
  • Services: Adaptador para integração com serviços externos de APIs, seja usando HTTP, gRPC ou GraphQL.
  • Security: Adaptador para integração com provedores de identidade, incluindo autenticação e autorização para proteção das APIs.
  • HealthCheck: Exposição para verificação de disponibilidade dos serviços no Cluster (Liveness, Readiness).
  • Observability: Adaptador com estratégias de observabilidade, incluindo log, rastreamento (trace), métricas e suporte ao OpenTelemetry para uso em Distributed Tracing.
  • AppCenter: Adaptador para exposição de informações para monitoramento dos serviços.
  • Extensions: Adaptador com extensibilidade para adicionar componentes NuGet externos de terceiros.

A nova aplicação microsserviço “ms-order” pode ser executada mesmo sem as regras de negócio. No contexto de microsserviço, o log é a tela da sua aplicação, e o Devprime oferece uma experiência incrível de visualização, gerando o log automaticamente usando o adaptador de ‘Observability’. Esse log, além de automático, é distribuído, permitindo a integração com processos entre microsserviços.

Iniciando o microsserviço “Order”

Você pode executar a aplicação utilizando o dotnet run --project .\src\App\App.csproj -c release ou usando os arquivos de script “.\run.ps1” caso tenha o powershell (Windows, Linux, macOS) instalado ou “./run.sh” no bash (Linux e macOS).

Permissão chmod no Linux, macOS
Para executar o arquivo “.sh” no (Linux, macOS) é necessário adicionar a permissão abaixo tornando o script executável.
chmod +x run.sh

Inicie o microsserviço executando um dos scripts abaixo:
.\run.ps1 (Windows) ou ./run.sh (Linux, macOS)

Ao iniciar a aplicação é possível acompanhar no log abaixo todo o comportamento do novo microsserviço.

Devprime starting microsserviço

Introdução a resiliência e circuit breaker

A plataforma Devprime oferece estratégias automáticas para sistemas distribuídos, incluindo recursos como Retry, Circuit Breaker e Resiliência por meio dos componentes da Devprime Stack.

Durante a inicialização do microsserviço ou em qualquer ponto de sua operação, é comum que ocorram falhas. Se você não possui um serviço de container do RabbitMQ em execução localmente ou configurado corretamente no arquivo “src/App/appsettings.json”, o adaptador iniciará automaticamente uma tentativa de “Retry”. Se não obtiver sucesso, acionará o “Circuit Breaker” devido a problemas no acesso ao serviço de Stream do RabbitMQ.

Devprime starting microsserviço

No retorno do serviço ele desligará o “Circuit Breaker” automaticamente.

Visualizando as API’s expostas no microsserviço

Quando você executa o novo microsserviço que foi criado, já terá acesso às URLs http://localhost:5000 ou https://localhost:5001 por meio do Adapter de Web. Isso permite visualizar a API exposta no padrão OpenAPI / Swagger. No entanto, como as regras de negócio ainda não foram implementadas, o único endpoint disponível é o /healthcheck, que é usado pelo cluster do Kubernetes para monitorar o serviço.

Devprime starting microsserviço

Adicionando uma regra de negócio

O projeto criado já está pronto para receber as regras de negócio no padrão Domain Driven Design (DDD). O código deve ser escrito dentro da pasta Domain. Após incluir é possível utilizar o acelerador “dp init” para analisar o domínio e criar o código necessário para exposição das API’s simplificando mais ainda a jornada de desenvolvimento além de manter as melhores práticas de desenvolvimento.

Para facilitar o nosso exemplo utilizaremos o dominio “Order” e obteremos o código exemplo do serviço marketplace da plataforma Devprime. Utilize o comando abaixo e verifique o resultado na pasta Domain src/Core/Domain/Aggregates.
dp marketplace order

Na sequência utilizaremos o comando “dp init” que permite analisar as regras de negócio no “Domain” e usando as melhores práticas de desenvolvimento construir o código necessário para permitir propagar uma interação do negócio com outras camadas da aplicação mantendo o desacoplamento, padronização e testabilidade economizando muitas horas de desenvolvimento.

O acelerador implementa automaticamente as classes de “Domain Events” em Domain, Event Handlers em Application, “Domain Services” em Application, “Application Services” em Application, persistência em State, “API’s/Controllers” em Web, testes unitários em Tests.

Para usar basta ter um domínio implementado e executar o comando conforme exemplo abaixo.
dp init

Devprime starting microsserviço

Agora ao executar novamente o microerviços ‘ms-oder’ você já terá um conjunto de API’s conforme apresentado abaixo
e já pode por exemplo efetuar um post na API e acompanhar todos o resultado do microsserviço funcionando e pronto para produção.

Devprime starting microsserviço

UAU !! Você já tem um microsserviço pronto para produção baseado no Devprime

Última modificação October 17, 2023 (ed779921)