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;
}
}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
Confira outros conteúdos:
Introdução ao JDBC
Novidades do Java
Teste unitário com JUnit
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.