Creating the first microservice

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.

Para iniciar o primeiro microsserviço nós utilizaremos o comando “dp new” do DevPrime CLI. Ao confirmar uma nova aplicação será criada em segundos com um projeto completo de arquitetura de software e pronta para produção acelerando um trabalho que você faria em semanas.

Nos utilizaremos o serviço de Stream como “RabbitMQ” para emissão de eventos habilitando “Event-Driven architecture” e o State “MongoDB” para a persistência dos dados.

dp new order --stream rabbitmq --state mongodb

Ao final é possível acompanhar o resultado do comando “dp” com a criação de um novo projeto de aplicação microsserviço. Os novos microsserviços criadoss recebem uma fundação completa e funcional acelerando o desenvolvimento de software cloud native.

DevPrime Version

O novo microservices está pronto para produção !!!

Entre na nova pasta criada para ter acesso ao seu novo projeto abra a pasta pelo Visual Studio Code para visualizar as funcionalidades habilitadas pelos aceleradores.
code .

As configurações dos recursos oferecidos pelo Stack estão disponíveis no arquivo appsettings (src\App\appsettings.json) podendo utilizar também variáveis de ambiente no container e um cofre vault no ambiente de produção.

O projeto segue uma abordagem de arquitetura Hexagonal architecture separando as camadas de tecnologia conforme detalhes abaixo. Cada camada de tecnologia tem componentes inteligêntes oferecidos pelo DevPrime Stack.

Hexagonal architecture
APP O projeto principal da sua aplicação e o padrão no Visual Studio
Web Exposição das API’s
Stream Implementação para receber eventos multi-stream (RabbitMQ, Kafka…)
State Integração com ferramentas de persistência
Domain As regras de negócio são baseadas em Domain Driven Design (DDD) e ficam isoladas nesse projeto. Todas as classes de domino devem herdar de classes do DevPrime Foundation.
Services Integração com serviços externos de API’s seja usando HTTP/ gRPC / GraphQL
Security Integração com provedores de identidade usando (authentication / authorization) para proteção das API’s
HealthCheck Exposição para verificação de disponibilidade dos serviços no Cluster (Liveness, Readiness).
Observability Estratégia de observabilidade usando (Log, Trace, Metrics) com suporte opentelemetry para uso em
AppCenter Exposição de informações para monitoramento dos serviços
Extensions Adicionar componentes nuget externos de terceiros

A nova aplicação microsserviço “Order” já poderá ser executado mesmo sem as regras de negócio. No contexto de microservice o log é a tela da sua aplicação e o DevPrime oferece uma experiência incrível de visualização gerendo o log automaticamente no adapter de ‘Observability’. Esse log além de automático é distribuido permitindo a integração com processos cross microsserviços.

Iniciando o microservice “Order”

Você pode executar a aplicação utilizando o “dotnet run” ou usando os arquivos de script “.\run.ps1” caso tenha o powershell (Windows, Linux, macOS) instalado ou “./run.sh” no bash (Linux e macOS). Amntes de utilizar bash no Linux é necessário executar a permissão apresentada abaixo tornando o script executável.
chmod +x run.sh

Antes de iniciar a aplicação lembre de subir e configurar os containers no docker criando o network devprime e adicionando os containers MongoDB e RabbitMQ. Depois crie a fila no portal do RabbitMQ.

Execute um dos arquivos abaixo conforme o seu sistema operacional.
.\run.ps1 ou ./run.sh (Linux, macOS)

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

DevPrime starting microservice

Introdução a resiliência e circuit breaker

Ao inicializar o microservice ou em qualquer momento da sua operação será comum acontecer falhas. Se você não tem um serviço de container do RabbitMQ rodando localmente ou devidamnete configurado no arquivo “src/App/appsettings.json” o adapter automaticamente vai iniciar um “Retry” e caso não tenha sucesso acionará um “Circuit Breaker” em função da falha de acesso ao serviço de Stream do “RabbitMQ”.

DevPrime starting microservice

No retorno do serviço ele desligará o “Circuit Breaker” automaticamente. Nós falaremos mais sobre esse tema em outro tópico.

Visualizando as API’s (OpenApi)

Após executar o primeiro microservice já é possível acessar a url https://localhost:5000 ou https://localhost:5001 e visualizar a sua API. Como não incluímos ainda regras de negócio o único endpoint apresentado é o /healthcheck utilizado pelo cluster do Kubernetes para monitoramento do serviço.

DevPrime starting microservice

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.

O acelerador constrói 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 microservice

Agora ao executar novamente o seu microervice já terá um conjunto de API’s conforme apresentado abaixo.

DevPrime starting microservice

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

Última modificação November 18, 2022 (9ddc897)