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

http://localhost:8761

pje2-gateway-service

Netflix Zuul

http://localhost:8180

pje2-web

Frontend Angular

http://localhost:4200

message-broker

RabbitMQ

http://localhost:5672

message-broker-mangement

RabbitMQ

http://localhost:15672

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

http://localhost:8761/eureka

Endereço para registro no service discovery

ENV_PJE2_CLIENTE_URL

http://localhost:4200

Endereço do fontend

ENV_PJE2_CLOUD_URL_GATEWAY

http://localhost:8180

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