Criando um microsserviço
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:
- Abra uma conta na plataforma Devprime e adquira uma licença (Developer/Enterprise).
- Instale uma versão atualizada do .NET 7.0 ou superior (.NET) no Linux, macOS e Windows.
- Instale e/ou atualize o Visual Studio Code e/ou o Visual Studio 2023 Community / Professional / Enterprise.
- Instale e/ou atualize o Docker (Para Windows, utilize o WSL2).
- Inicialize os containers do MongoDB e RabbitMQ no Docker e adicione a fila ‘orderevents’ no RabbitMQ.
- Instale e ative a versão mais nova do Devprime CLI.
- Crie uma pasta para os seus projetos e defina as permissões de leitura e gravação.
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:
|
|
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.
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.
|
|
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.
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.
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.
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
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.
Última modificação October 17, 2023 (ed779921)UAU !! Você já tem um microsserviço pronto para produção baseado no Devprime