| Data de elaboração | 29/06/2023 |
| Responsável pelo estudo | Ádrian Rabelo Mendes (Assessor), Diego Gonçalves de Almeida (Assessor), Jônatas Legal (Técnico em Tecnologia da Informação e Comunicação) (Assessor), Rodrigo Stefano Sales Nascimento (Assessor) |
| Equipe do estudo | CAOS |
| Alvo | Sistema Governa |
| Origem | Objetivo estratégico: Realizar levantamento de integração assíncrona do cadastro de servidor, entre os sistemas e-Estado e Governa. |
| Objetivo | para que seja possível realizar a inserção de informações recebidas pelo e-Estado e integre com o governa, reduzindo o retrabalho e informações desiguais nos sistemas. |
AMQP - Advanced Message Queuing Protocol
RabbitMQ - É um servidor de mensageria de código aberto
Acknowledgment – Confirmação de entrega de mensagem
QoS – Quality of Service
O presente estudo técnico tem como propósito analisar e apresentar propostas para a integração da tela «Novo Servidor» do e-Estado com a tela "Servidor -> Cadastro de Servidor -> Novo - Aba «Especialização» do Governa. No momento, essas duas telas operam de maneira independente, o que requer a inserção repetida de informações e pode resultar em inconsistências nos dados. O objetivo é realizar uma integração eficiente entre as informações dos sistemas, eliminando a redundância e aprimorando a qualidade dos dados registrados no Governa.
O estudo também aborda a utilização do protocolo AMQP em conjunto com o RabbitMQ. O RabbitMQ é um sistema de mensageria de código aberto que implementa o protocolo AMQP, permitindo a troca eficiente de mensagens entre diferentes sistemas e componentes.
O protocolo AMQP (Advanced Message Queuing Protocol) é um protocolo de mensagens assíncronas, utilizado para comunicação entre sistemas distribuídos. Ele foi desenvolvido para facilitar a troca de mensagens entre aplicativos e serviços de forma eficiente e confiável.
O AMQP foi projetado para ser independente de plataforma, permitindo a comunicação entre diferentes sistemas e linguagens de programação. Ele define um conjunto de regras e formatos para enviar, rotear e receber mensagens, garantindo que elas sejam entregues de maneira ordenada e confiável.
Uma das principais características do AMQP é a utilização de filas de mensagens. As mensagens são publicadas em filas e podem ser consumidas por um ou mais consumidores, de acordo com um modelo de pub/sub (publicação/assinatura). Isso permite que os aplicativos enviem e recebam mensagens de forma assíncrona, desacoplando o produtor da mensagem do consumidor.
Além das filas, o AMQP também define trocas (exchanges) e vinculações (bindings) para rotear as mensagens para as filas corretas. As trocas recebem mensagens dos produtores e as encaminham para as filas com base em regras de roteamento específicas. As vinculações são utilizadas para definir a relação entre as trocas e as filas.
O AMQP suporta diferentes modelos de entrega de mensagens, como confirmação de entrega (acknowledgment), que garante que as mensagens sejam entregues com sucesso, e qualidade de serviço (QoS), que permite definir níveis de prioridade para as mensagens.
O protocolo AMQP é amplamente utilizado em sistemas distribuídos e arquiteturas orientadas a mensagens, como em aplicações de mensageria, Internet das Coisas (IoT), sistemas financeiros e sistemas de notificação em tempo real.
Em resumo, o protocolo AMQP é um protocolo de mensagens assíncronas que facilita a comunicação entre sistemas distribuídos, oferecendo confiabilidade, flexibilidade e escalabilidade. Ele utiliza filas, trocas e vinculações para rotear as mensagens de forma eficiente e suporta diferentes modelos de entrega e qualidade de serviço.
Figura 1: Protocolo AMQP
O RabbitMQ é um software de mensagem assíncrona de código aberto, que implementa o protocolo AMQP (Advanced Message Queuing Protocol). Ele é amplamente utilizado como um intermediário de mensagens entre diferentes sistemas e serviços distribuídos.
O RabbitMQ fornece uma plataforma robusta para a troca de mensagens, permitindo que aplicativos e serviços se comuniquem de maneira eficiente e confiável. Ele utiliza filas de mensagens para armazenar e entregar as mensagens entre os produtores e consumidores, garantindo a entrega ordenada e controlada.
image.png
image.png
image.png
O objeto JSON recebido pelo serviço de mensageria RabbitMQ é proveniente de ações realizadas na entidade «Servidor» no sistema e-Estado. Dentre as ações inclui-se: criação, atualização de dados e exclusão.
O objeto JSON contém diversos campos que representam os dados do servidor, como identificação, matrícula, tipo de vínculo, data de admissão, entre outros. Essas informações são cruciais para acompanhar e registrar o histórico dos servidores no sistema. Abaixo pode-se conferir o objeto de retorno do serviço rabbitMQ.
Quando a ação é INSERT, o RabbitMQ retorna o seguinte objeto:
{
«id»: 215349,
«matricula»: 600003369,
«tipo_vinculo_id»: 7,
«data_admissao»: «15/12/2022»,
«concurso_id»: null,
«numero_decreto»: null,
«data_decreto»: null,
«numero_diario_oficial»: null,
«data_diario_oficial»: null,
«data_posse»: null,
«data_efetivo_exercicio»: null,
«cargo_efetivo_id»: null,
«cargo_cds_id»: null,
«funcao_id»: null,
«unidade_vinculo_id»: 2,
«previdencia_id»: null,
«vinculo_original_id»: null,
«estado_id»: null,
«municipio_id»: null,
«poder_id»: null,
«regime_id»: null,
«conta_fgts»: null,
«unidade_pagamento_id»: null,
«conta_pagamento_id»: null,
«padrao_id»: null,
«horas_semanais»: null,
«horas_extras»: null,
«registro_ponto_id»: null,
«pessoa_id»: 1758202,
«plantonista»: null,
«habilidade_cargo_efetivo_id»: null,
«inscricao_concurso»: null,
«nota_final_concurso»: null,
«classificacao_concurso»: null,
«pcd»: null,
«negro»: null,
«processo_judicial»: null,
«ocupa_cargo_publico»: null,
«processo_sei»: null,
«oficio_apresentacao»: null,
«municipio_concurso_lotacao_id»: null,
«data_desligamento»: null,
«siape»: null,
«atividade_privativa_cargo»: null,
«matricula_antiga»: null,
«matricula_nome»: «600003369 - Lucas Teste»,
«estado»: null,
«municipio»: null,
«departamento_id»: «»,
«cargo_efetivo»: null,
«cargo_cds»: null,
«concurso»: null,
«funcao»: null,
«padrao»: null,
«pessoa»: {
«id»: 1758202,
«nome»: «Lucas Teste»,
«data»: «2023-06-23T08:34:21.500402»
},
«pessoa_fisica»: {
«pessoa_id»: 1758202,
«estado_civil_id»: 2,
«sexo_id»: 1,
«escolaridade_id»: null,
«tipo_sanguineo_id»: null,
«cpf»: «2250",
«data_nascimento»: «2003-05-10»,
«falecimento»: null,
«raca»: null,
«pcd»: null,
«tipo_nacionalidade»: null,
«nacionalidade»: null,
«pais»: null,
«estado»: null,
«naturalidade»: null,
«data_entrada»: «2003-05-10»,
«pis_pasep»: null,
«email»: "sor@g***.com»,
«doador_de_sangue»: null,
«raca_id»: 5,
«tipo_nacionalidade_id»: 2,
«pais_id»: 1,
«nacionalidade_id»: 1,
«estado_id»: 21,
«naturalidade_id»: 5582
},
«poder»: null,
«previdencia»: null,
«regime»: null,
«registro_ponto»: null,
«tipo_vinculo»: {
«id»: 7,
«nome»: «Estagiário»,
«grupo»: null
},
«unidade_vinculo»: {
«id»: 2,
«instituicao_id»: 1,
«unidade_id»: null,
«responsavel_id»: 1744688,
«nome»: «Superintendência Estadual de Tecnologia da Informação e Comunicação»,
«sigla»: «SETIC»,
«gestora»: 1,
«orcamentaria»: 1,
«administrativa»: 1,
«cnpj»: «17./*»,
«id_departamento_sinvrea»: null,
«tipo_normatizacao_id»: 2,
«numero_normatizacao»: «27.577»,
«staff»: null,
«colegiada»: null,
«codigo_orcamentario»: «110007»,
«data_normatizacao»: «2022-11-04»,
«extincao_organograma_id»: null,
«endereco_id»: 49685,
«departamento_id»: null,
«orgao_sei_id»: 73,
«unidade_sei_id»: null,
«data_criacao»: null
},
«unidade_pagamento»: null,
«vinculo_original»: null,
«nome»: «Lucas Teste»
}
Quando a ação é UPDATE, o RabbitMQ retorna o seguinte objeto:
{
«id»: 1534244,
«nome»: "JESSE ELIAS VIEIRA CAMPOS ",
«cpf»: "0056",
«data_nascimento»: "--",
«rg»: {
«registro»: 36,
«rg»: «15",
«orgao_emissor»: «SSP»,
«estado»: «RO»,
«data_emissao»: «15/02/2008»
},
«nome_mae»: null,
«data_nascimento_mae»: null,
«sexo»: 1,
«estado_civil»: 1,
«raca»: 2,
«tipo_sanguineo»: 1,
«escolaridade»: 5,
«nacionalidade_bacen»: 1058,
«naturalidade»: «Porto Velho»,
«pis»: {
«pessoa_id»: 1534244,
«tipo_documento_id»: 11,
«numero»: "17"
},
«titulo_eleitor»: {
«pessoa_id»: 1534244,
«tipo_documento_id»: 3,
«registro»: 47,
«numero»: "0*******6",
«complemento1»: "02»,
«complemento2»: «0**7»,
«data_emissao»: null
},
«endereco»: {
«rua»: "Rua ***",
«numero»: ,
«complemento»: "RE A",
«bairro»: «Nova Esperança»,
«cep»: 78,
«cidade»: {
«id»: 5582,
«nome»: «Porto Velho»,
«cod_ibge»: 1100205,
«estado_id»: 21
},
«estado»: {
«id»: 21,
«nome»: «Rondônia»,
«sigla»: «RO»,
«codigo_ibge»: 11,
«pais_id»: 1
}
},
«deficiencias»: [],
«parentes»: []
}
As informações sobre especialização podem ser obtidas por meio do sequinte campo retornado no objeto JSON:
pessoa_fisica.escolaridade_id
image.png
Os seguintes campos podem refletir-se em ambos os sistemas:
Tabela Governa Campo Governa e-Estado
admin.pessoa_especializacao id_especializacao id_especializacao escolaridade_id (7 - especializacao)
| História | O quê: Eu, dev, preciso criar uma propriedade Especialização na entidade de Servidor. Por quê: para realizar a integração de dados de Especialização cadastradas no sistema e-Estado |
| Regras e Validações | — |
| Pontuação | 2 |
Neste estudo, analisamos a integração entre os sistemas e-Estado e Governa, focando nos dados da entidade «Servidor» e suas correspondências em ambos os sistemas. Através dessa análise, chegamos a algumas conclusões:
A integração entre os sistemas e-Estado e Governa requer a associação correta dos campos compartilhados entre eles, como matrícula, data de admissão, data do efetivo exercício, data do desligamento, lotação de contratação, nome e CPF.
Alguns campos importantes não possuem correspondência direta nos sistemas, como data de progressão, tipo de admissão e tempos de serviço (federal, estadual, municipal e afastamento). Esses campos requerem uma avaliação mais aprofundada e busca por possíveis soluções, como adição de campos.
Como Disponibilizar o RabbitMQ para múltiplos consumos:
AMQP - Documentação oficial:
RabbitMQ - Documentação oficial:
https://documentos.sistemas.ro.gov.br/link/2601#bkmrk-https%3A%2F%2Fwww.rabbitmq