Creating the first microservice

Nós criaremos o primeiro microsseriço em 30 minutos utilizando o DevPrime.

O comando “dp new” é utilizado para a criação de novas aplicações baseadas no Devprime. Para iniciar um novo microservice utilize o exemplo de comando apresentado abaixo. Ao confirmar uma nova aplicação será criada em segundos com um projeto completo de arquitetura de software e pronta para produção.

Nesse exemplo informaremos o nome da nova aplicação, o tipo de serviço de Stream como “RabbitMQ” para emissão de eventos habilitando “Event-Driven architecture” e o State como “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 !!!

Entre na nova pasta criada para ter acesso ao seu novo projeto. Se desejar abra a pasta pelo Visual Studio e visualize as funcionalidades do DevPrime e seus aceleradores. O Stack permite ativar novas funcionalidades pelo arquivo de configuração da aplicação (appsettings), variáveis de ambiente no container e pelo CLI caso necessário.

O projeto segue uma abordagem de arquitetura separando as camadas de tecnologia conforme detalhes abaixo.

Hexagonal architecture
APP O projeto principal da sua aplicação e o padrão no Visual Studio
Web Exposição das API’s por meio de controllers
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

A nova aplicação microservice “Order” por ser um projeto pronto 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’.

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). Ao usar o bash é 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. Depois execute um dos arquivos abaixo conforme o seu sistema operacional.

    .\run.ps1 ou ./run.sh (Linux, macOS)

Ao iniciar a aplicação será posivel 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:5001 do mesmo 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” utilizando um o 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 se 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

Last modified January 1, 0001