Ir para o conteúdo principal

Integração entre os sistemas Consignação e Governa para troca de informações

Data de elaboração 17/16/2023
Responsável pelo estudo
  • Alef Carvalho da Silva (Analista)
Equipe do estudo
  • André Honório de Andrade Silva (Tecnico)
  • Gezinéia Paula da Costa (Product Owner)
  • Emanuel Rufino Alcantara de Lima (Analista)
  • Alef Carvalho (Analista)
  • Gustavo Felix (Analista)
Alvo Alpha Serviços
Origem

VING-1388:  Eu, Vingadores, preciso realizar um estudo sobre a integração da consignação com o governa

Objetivo

O presente estudo visa analisar a viabilidade técnica e propor soluções para a integração entre os sistemas Consignação e Governa.


1 - OBJETIVO

O Presente estudo objetiva levantar as formas de integração para consumo das informações sensíveis entre os sistemas Governa e Consignação.

1.1 JUSTIFICATIVA

Atualmente a troca de informações entre os dois sistemas de dá por meio da exportação e importação de arquivos de texto plano. O processo de transporte destes arquivos entre os sistemas é feito de maneira manual, desta forma não há qualquer garantia de integridade das informações transmitidas.

Além disso um grande volume de informação desnecessária é transmitido por meio destes arquivos visto que todos os registros do banco de dados são empacotados no arquivo. Durante o processo de leitura é feito a verificação de duplicidade das informações e nesse caso o registro do arquivo é ignorado, fazendo com que o processo de leitura do arquivo atualmente leve em torno de 4 (quatro) dias.

1.2 RESULTADOS ESPERADOS

Espera-se que, após este estudo, seja possível identificar se há viabilidade para construção da integração entre os sistemas, além dos meios e recursos técnicos necessários para tal.

2 - INTRODUÇÃO

[resumo intro sistema consignação]. [resumo intro sistema governa]

2.1 - GARANTIA DE INTEGRIDADE

Com a integração entre os dois sistemas há a possibilidade de se implantar técnicas de verificação da integridade dos arquivos visando garantir que os mesmos não foram alterados ou corrompidos durante a transmissão.

2.2 - MENOR TEMPO DE IMPORTAÇÃO 

A transmissão automática dos arquivos entre os sistemas tornará possível o envio somente das informações do fechamento atual, eliminando dados que já foram importados anteriormente e otimizando o tempo de leitura e importação dos arquivos.

3 - DESENVOLVIMENTO

3.1 CENÁRIO ATUAL 

Como já mencionado os dois sistemas são interdependentes, desta forma um usuário com permissões de administrador no sistema de consignação pode exportar ou importar os tipos de arquivo a seguir: 

Exportação:

        • Registro de averbações
        • Desconto de cartão de crédito

Importação:

        • Lotação
        • Cargo
        • Verba
        • Servidor
        • Pensionista
        • Margem
        • Averbação
        • Classificação
        • Retorno
        • Fixa e variável
        • Variável cartão
        • Retorno com CODAVB
        • Retorno data de crédito
        • Averbação de exclusão

3.2 POSSÍVEIS SOLUÇÕES

3.2.1 INTEGRAÇÃO VIA SERVIÇO DE MESSAGERIA

Nesta abordagem a transmissão e recepção manual dos arquivos é substituída por uma comunicação direta entre os dois sistemas por meio de um serviço de messageria RabbitMQ. 

Para tal deveremos adicionar as entradas abaixo no arquivo application.properties e em seguida adicionar as entradas correspondentes em cada arquivo de configuração de variáveis de ambiente.

sprint.rabbitmq.host=${RABBITMQ_HOST}
sprint.rabbitmq.port=${RABBITMQ_PORT}
sprint.rabbitmq.username=${RABBITMQ_USERNAME}
sprint.rabbitmq.password=${RABBITMQ_PASSWORD}
RABBITMQ_HOST={host do servidor rmq}
RABBITMQ_PORT=5672
RABBITMQ_USERNAME={usuário do servidor rmq}
RABBITMQ_PASSWORD={senha do servidor rmq}

Em seguida deveremos declarar a dependência necessária para conexão entre o Spring Boot e o servidor RabbitMQ no arquivo pom.xml

<dependency>
  <groupId>org.springframework.amqp</groupId>
  <artifactId>spring-rabbit</artifactId>
</dependency>

Deverá também ser criada uma classe de inicialização da conexão que será automaticamente inicializada pelo Sprint durante a inicialização da aplicação.

package br.com.gov.consignacao.connections;

import constantes.RabbitmqConstantes;
import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

@Component
public class RabbitMQConection {
  
  private static final String NOME_EXCHANGE = "amq.direct";

  private AmqpAdmin amqpAdmin;

  public RabbitMQConection(AmqpAdmin amqpAdmin){
    this.amqpAdmin = amqpAdmin;
  }

  private Queue fila(String nomeFila){
    return new Queue(nomeFila, true, false, false);
  }

  private DirectExchange trocaDireta() {
    return new DirectExchange(NOME_EXCHANGE);
  }

  private Binding relacionamento(Queue fila, DirectExchange troca){
    return new Binding(fila.getName(), Binding.DestinationType.QUEUE, troca.getName(), fila.getName(), null);
  }

  //está função é executada assim que nossa classe é instanciada pelo Spring, devido a anotação @Component
  @PostConstruct
  private void adiciona(){
    Queue filaEstoque = this.fila(RabbitmqConstantes.FILA_ESTOQUE);
    Queue filaPreco   = this.fila(RabbitmqConstantes.FILA_PRECO);

    DirectExchange troca = this.trocaDireta();

    Binding ligacaoEstoque = this.relacionamento(filaEstoque, troca);
    Binding ligacaoPreco   = this.relacionamento(filaPreco, troca);

    //Criando as filas no RabbitMQ
    this.amqpAdmin.declareQueue(filaEstoque);

    this.amqpAdmin.declareExchange(troca);

    this.amqpAdmin.declareBinding(ligacaoEstoque);
    this.amqpAdmin.declareBinding(ligacaoPreco);
  }

 

3.3 POSSÍVEIS IMPEDIMENTOS

4 - CONCLUSÃO

5 - REFERÊNCIAS