Por que eu devo ler este artigo:Este artigo apresenta recursos importantes do Apache Camel através da implementação dos requisitos da solução de pagamento bancário. Fundamentado na implementação desses requisitos, será possível constatar as facilidades que o framework oferece para encapsular código complexo capaz de integrar sistemas heterogêneos. Portanto, aqueles que desejam aprender na prática os recursos fundamentais para a construção de um sistema integrado com o auxílio do Apache Camel encontrarão neste artigo códigos valiosos para o alcance desse objetivo.

Na parte 2 desta série de artigos foi apresentado o exemplo prático a ser implementado. Este exemplo consiste na construção de uma solução integradora para pagamento bancário com cartão de crédito via aplicativo mobile. Além disso, os requisitos funcionais e não funcionais que devem ser atendidos também foram indicados, juntamente com o fluxo de negócio a ser seguido.

A partir dessas informações, foi definido que a arquitetura da solução será baseada em componentes com comunicação interna utilizando mensageria no formato JSON, permitindo assim baixo acoplamento, processamento assíncrono, performance, flexibilidade, tolerância a falhas, escalabilidade e baixo custo de manutenção. Ademais, foram apresentados conceitos e funcionalidades básicas do Apache Camel através da implementação do primeiro fluxo de negócio.

Nesta terceira parte, novos recursos do framework serão introduzidos, com destaque para a implementação dos EIPs, de componentes para mensageria e a continuação da codificação do roteamento e manipulação de mensagens visando atender as regras de negócio.

Para exercitar e aprender esses recursos do Camel, os requisitos definidos no artigo anterior continuarão a serem implementados, em sua sequência natural, para que as integrações iniciais com os sistemas externos bancários e de segurança do cartão sejam realizadas ao passo que a arquitetura da solução também é evoluída.

Implementando os requisitos RF-02-SISBAN e RNF-02-SISBAN

Com os primeiros requisitos já atendidos, será iniciada a implementação do RF-02-SISBAN, que menciona que, após receber os dados da requisição de pagamento do Aplicativo Mobile, a Solução de Pagamento Bancário deve enviar o número do cartão e o CPF do titular para o Sistema Bancário para validação, e também do RNF-02-SISBAN, que define que a comunicação com o Sistema Bancário deve ser realizada via mensageria com o formato JSON.

Para atender os novos requisitos, será necessário continuar com o desenvolvimento do componente MobileIntegracao, iniciando pelas alterações na classe MobileIntegracaoRouteBuilder, responsável por definir todas as rotas do respectivo componente. Sendo assim, precisamos alterar a classe MobileIntegracaoRouteBuilder conforme a codificação da Listagem 1.


package br.com.devmedia.mobile.integracao.rota;

import org.apache.camel.LoggingLevel;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.model.rest.RestBindingMode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import br.com.devmedia.mobile.integracao.comum.PagamentoRequisicao;
import br.com.devmedia.mobile.integracao.processor.ConverteParaPagamentoBancarioComumProcessor;

@Component
public class MobileIntegracaoRouteBuilder extends RouteBuilder {

private ConverteParaPagamentoBancarioComumProcessor converteParaPagamentoBancarioComumProcessor;

@Override
public void configure() throws Exception {
 
 rest("/pagamento").id("rotaEntradaWS")
  .description("Serviço para efetuar pagamento bancário")
  .consumes("application/json")
  .produces("application/json")
  .post()
  .bindingMode(RestBindingMode.json)
  .type(PagamentoRequisicao.class)
 .to("seda:postPagamento");
 
 from("seda:postPagamento")
  .log(LoggingLevel.INFO, "[MobileIntegracao] Nova requisição de pagamento bancário")
  .process(converteParaPagamentoBancarioComumProcessor)
  .setHeader("FLUXO", constant("NOVA_REQUISICAO_PAGAMENTO_BANCARIO"))
  .log(LoggingLevel.INFO, "[MobileIntegracao] para [PagamentoBancario] 
  Nova requisição de pagamento bancário")
  .to("activemq:queue:PagamentoBancario?deliveryPersistent=false")
 .end();
}

@Autowired
public void setConverteParaPagamentoBancarioComumProcessor
(ConverteParaPagamentoBancarioComumProcessor converteParaPagamentoBancarioComumProcessor) {
 this.converteParaPagamentoBancarioComumProcessor = converteParaPagamentoBancarioComumProcessor;
}
}
Listagem 1. Alterações no código da classe MobileIntegracaoRouteBuilder
...

Fim do trecho gratuito • continue abaixo
CONTEÚDO EXCLUSIVO

Desbloqueie toda a DevMedia

  • +2000 artigos e vídeos
  • +40 trilhas sobre Front-end, Back-end, IA e muito mais
  • +5000 exercícios práticos
  • Mentorias ao vivo individuais
até 50% OFF
A partir de
R$ 69 /mês
Assinar agora