1. Infraestrutura básica com docker
A arquitetura baseada em micro serviços do PJe 2.1 depende de alguns recursos de infraestrutura. Estes recursos são responsáveis por prover a integração necessária para o ambiente. Entre estes recursos estão: serviço de descoberta (Eureka), API gateway (Zuul) e broker de mensagens (RabbitMQ). Todos esses serviços estão disponíveis no repositório de imagens Docker do CNJ.
Para facilitar a composição do ambiente de desenvolvimento a sugestão é utilizar o docker-compose. O docker-compose permite fazer uma composição de serviços que serão executados na máquina do desenvolvedor. A pilha de serviços de infraestrutura de nuvem, então, será executada localmente e o desenvolvedor poderá focar em desenvolver o seu microserviço.
2. Executando o docker-compose da pilha do PJe
Para este ambiente é necessário ter o Docker e o docker-compose instalados na máquina. |
Para executar a pilha de serviços do PJe devemos utilizar o seguinte docker-compose.yml:
version: "3"
services:
discovery:
image: registry.cnj.jus.br/pje2/pje-discovery:latest
container_name: discovery
ports:
- '8761:8761'
gateway:
image: registry.cnj.jus.br/pje2/pje-gateway:latest
container_name: gateway
ports:
- '8180:8180'
- '8181:8181'
environment:
- EUREKA_SERVER_DEFAULT_ZONE=http://discovery:8761/eureka/
- EUREKA_INSTANCE_PREFERIPADDRESS=true
- GATEWAY_ACTIVE_PROFILES=dev
rabbitmq:
image: rabbitmq:3.7.9-management-alpine
container_name: rabbitmq
ports:
- '15672:15672'
- '5672:5672'
environment:
- RABBITMQ_DEFAULT_USER=pje
- RABBITMQ_DEFAULT_PASS=pje
- RABBITMQ_DEFAULT_VHOST=pje-dev
frontend:
image: registry.cnj.jus.br/pje2/pje-frontend:1.0.18
container_name: pje-frontend
ports:
- '4200:80'
O comando para executar o compose será:
sudo docker-compose docker-compose.yml up -d
Ao executar o compose temos acesso aos seguintes serviços:
Serviço | Tecnologia | Url |
---|---|---|
pje2-discovery-service |
Netflix Eureka |
|
pje2-gateway-service |
Netflix Zuul |
|
pje2-web |
Frontend Angular |
|
message-broker |
RabbitMQ |
|
message-broker-mangement |
RabbitMQ |
3. Subindo o frontend Angular (PJE2-WEB)
O PJe conta agora com um projeto Angular para frontend. Este projeto visa a substituição gradual das telas JSF atuais. O novo cliente PJE2-WEB com Angular foi construído de forma a se comunicar com toda API de serviços do PJe, e prover os serviços ao usuário final através de uma experiência mais moderna e amigável. Caso o desenvolvedor necessite realizar alterações no código do frontend é necessário removê-lo do compose, e subir a aplicação separadamente.
3.1. Clonando o projeto PJE2-WEB
O PJE2-WEB é um projeto Angular padrão gerado com angular-cli, portanto antes de começar certifique-se de que você tem o Node.js na versão 10.x ou superior instalado em sua máquina.
Com o Node.js instalado já podemos instalar o angular-cli:
$ npm install -g @angular/cli
Após a instalação do angular-cli faça o clone do repositório do PJE2-WEB:
Com o repositório clonado iremos instalar as depedências do projeto:
$ npm install
3.2. Iniciando o frontend PJE2-WEB
Para executar nosso frontend usaremos o próprio angular-cli, que já nos provê um servidor para desenvolvimento. Na raiz do projeto PJE2-WEB execute:
$ ng serve --host=0.0.0.0 --disable-host-check
Este comando irá compilar e servir o projeto frontend em http://localhost:4200
4. PJe legado para o ambiente de micro serviços
O projeto PJe deve ser configurado para que se integre ao ambiente de micro serviços. Na nova arquitetura o PJe passou por diversas alterações para que pudesse fazer parte desse novo ambiente. Hoje o projeto é um grande monolito, com diversos emaranhamentos negociais que o torna um projeto de difícil manutenção e muito sujeito a falhas. Com a nova arquitetura quebraremos aos poucos o monolito, criando novos micro serviços que atendam a contextos de negócio bem definidos.
4.1. Configurando o PJe
Para se integrar ao ambiente o PJe precisa de configurações como: url do pje2-discovery-service, url do gateway, url do rabbitmq entre outras configurações possíveis. Vamos nos concetrar nas configurações básicas para o ambiente de desenvolvimento.
Estas configurações serão passadas ao PJe através de variáveis de ambiente.
Também é possível passar estas configurações por meio de variáveis do maven ou arquivo de propriedades (integracao.properties). |
Não esqueça de subir o PJe com bind para o endereço 0.0.0.0, do contrário o gateway não conseguirá enviar requisições ao PJe. |
As seguintes variáveis de ambiente deverão ser passadas ao servidor de aplicação do PJe com os respectivos valores:
Variável | Valor | Descrição |
---|---|---|
ENV_PJE2_CLOUD_APP_NAME |
pje-cnj |
Nome do serviço PJe |
ENV_PJE2_CLOUD_REGISTRAR |
true |
Indica se o PJe deve se registrar no service discovery |
ENV_EUREKA_SERVER_URL |
Endereço para registro no service discovery |
|
ENV_PJE2_CLIENTE_URL |
Endereço do fontend |
|
ENV_PJE2_CLOUD_URL_GATEWAY |
Endereço do API Gateway |
|
ENV_PJE2_CLOUD_RABBIT_PUBLISH_MESSAGES |
true |
Indica se o PJe deve publicar mensagens para o broker |
ENV_PJE2_CLOUD_RABBIT_HOST= |
localhost |
Endereço do message broker RabbitMQ |
ENV_PJE2_CLOUD_RABBIT_USERNAME |
pje |
Nome de usuário do PJe no RabbitMQ |
ENV_PJE2_CLOUD_RABBIT_PASSWORD |
pje |
Senha de usuário do PJe no RabbitMQ |
ENV_PJE2_CLOUD_RABBIT_VIRTUALHOST |
pje-dev |
Nome do virtual host a ser utilizado no RabbitMQ |
Com as variáveis configuradas é só subir o servidor de aplicação. No startup da aplicação o PJe deverá se registrar no pje2-discovery-service. Para verificar quais serviços estão registrados acesse http://localhost:8761. Os seguinte serviços devem estar registrados no painel do Eureka:
-
gateway-service
-
pje-cnj