Apache Camel rotas para as suas mensagens. Bruno Borges 2009



Documentos relacionados
Integrações e o ecossistema Java. Fabric8 ao Resgate!

Java Básico. Matrícula de Alunos. Marco Antonio, Arquiteto de Software TJDF Novembro/2005

JPA: Persistência padronizada em Java

Groovy & Grails. Arian Pasquali. quarta-feira, 12 de outubro de 11

Como criar um EJB. Criando um projeto EJB com um cliente WEB no Eclipse

Universidade Federal de Juiz de Fora Ciência da Computação Sistemas Distribuídos Professor Ciro Barbosa

Integração Orientada a Serviços

Programa Copa do Mundo 2014

Plataforma para Agentes

Sistemas Distribuídos

WOW Mobile Rui Miguel Miranda Ramos

Midleware CXF. Angélica A. P. Ribeiro, Leandro M. G. Sousa. Universidade Federal de Uberlândia (UFU) Caixa Postal Monte Carmelo MG Brazil

soluções transversais SOLUÇÕES middleware

Spring Integration. Saiba como desenhar uma solução completa utilizando padrões EAI com o Spring Integration

TECNOLOGIA JAVA TENDÊNCIAS, MERCADO E FUTURO

SISTEMAS DISTRIBUÍDOS

Java Spaces Exemplos


P R E F E I T U R A M U N I C I P A L D E J A R D I M

Uma Introdução à Arquitetura CORBA. O Object Request Broker (ORB)

U N I V E R S I D A D E F E D E R A L D O P A R A N Á L E T Í C I A M A R I A G R O B É R I O

EMML Enterprise Mashup Markup Language. Jesús Martín Talavera Portocarrero

Sistemas Empresariais Integrados

Se seu negócio requer o tipo de

Ac esse o sit e w w w. d e ca c lu b.c om.br / es t u dos e f a ç a s u a insc riçã o cl ica nd o e m Pa r t i c i p e :

Apresentação. Fernando Lozano

Web Browser como o processo cliente. Servidor web com páginas estáticas Vs. Aplicações dinâmicas para a Web:

INT-9: Implementing ESB Processes with OpenEdge and Sonic David Cleary

insfcanceof new public switch transient while byte continue extends for int null

MIDDLEWARE Aplicativos RMI, RPC e eventos Camadas Protocolo Requesição-Respostal Middleware Representação Externa dos Dados Sistemas Operacionais

Message Driven Beans. Apresentação. Introdução Implementação de MDBs Deployment no JBoss Java Messaging Service Exemplo

Como você vê a visita e o acompanhante nos serviços de saúde? Por que redimensionar o espaço da visita e do acompanhante?

Listando, gravando, alterando e excluindo registro do banco de dados com JSP

JSF - Controle de Acesso FERNANDO FREITAS COSTA

REVIS TA CONTATO LEITOR GALERIA COLUNAS EDIÇÕES ANTIGAS ASSINATURA. 30/7/2014 Salão de Gramado encerra nesta quinta-feira.

Criar uma aplicação JPA2 com EclipseLink e H2

A ) O cliente terá que implementar uma interface remota. . Definir a interface remota com os métodos que poderão ser acedidos remotamente

Middleware de Aplicações Paralelas/Distribuídas

UNIVERSIDADE. Sistemas Distribuídos

Invocação de Métodos Remotos

Enterprise Java Beans

Programação com sockets (em Java)

Objetos Distribuídos - Programação Distribuída Orientado a Objetos. Luiz Affonso Guedes

Módulo 5 - JDBC java.sql - Conexão com Banco de Dados

Sistemas Distribuídos e Tolerância a Falhas Mestrado em Engenharia Informática 1ª ano / 2ª semestre

Programação de Sockets

Invocação de Métodos Remotos RMI (Remote Method Invocation)

Aula 30 - Sockets em Java

Java EE 6. A revolução do. Um overview sobre as novidades da JSR 316. a r t i g o

Java 2 Standard Edition. Fundamentos de. Objetos Remotos. Helder da Rocha

IN S A In s titu t N a tio n a l

JPA Java Persistence API. Prof. Ramon Chiara

Spring: Um suite de novas opções para Java EE

A interface de uma mensagem é extremamente flexível e permite várias formas de customização de conteúdo. Figura 1 - Tipos de Mensagens JMS

INSTALAÇÃO E USO DO GOOGLE APP ENGINE PLUGIN utilizando o Eclipse Galileo

J2EE. J2EE - Surgimento

Aplicabilidade: visão geral

ARQUITETURA SISGRAD. Manual de Utilização. Versão: 2.0. Criação: 05 de julho de 2007 Autor: André Penteado

Serviços Web: Arquitetura

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

Fatos e Mitos do Java EE. Fernando Lozano Consultor 4Linux lozano@4linux.com.br

Introdução à Plataforma J2EE Java2 Enterprise Edition. Alex de V. Garcia, Dr.

Evolução guiada por APIs. com REST para modernizar seu legado

A IMPORTÂNCIA DA INTERDISCIPLINARIDADE EM SAÚDE

PADRÃO PARA ENVIO DE . Versão 1.0

A N E X O P L A N O M U N I C I P A L D E E D U C A Ç Ã O

Spring Framework Luiz Daniel Creão Augusto Sistemas de Middleware Avançados IME-USP /02

Capítulo 1 - Java EE 6 por alto - 1

JDBC. Siga as instruções para instalar o banco de dados H2 e criar a tabela Alunos.

Prova Específica Cargo Desenvolvimento

FERRAMENTAS DE DESENVOLVIMENTO DE SOFTWARE OPEN SOURCE. Caso de Sucesso no ACM, IP

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

Tutorial RMI (Remote Method Invocation) por Alabê Duarte

Prof. Fellipe Araújo Aleixo

Programação em Rede Baseada em Java. Luiz Affonso Guedes Tópicos em Redes de Computadores Programação Distribuída

Sistemas Distribuídos na Web. Pedro Ferreira DI - FCUL

Hoje em dia é muito comum utilizar uma API de logging de mensagens como o Log4j para indicar os comportamentos de uma aplicação.

UFG - Instituto de Informática

MAC-0462 Padrões arquiteturais para sistemas baseados em componentes reconfiguráveis

Java Web/UI. Maven3 Redmine CVS. Áreas de conhecimento: Web o Aplicativos Web o Portal de conteúdo o REST Services Web Site Performance

Construção de novas Classes em Java. Classes Atributos Métodos Herança...

SCE-557. Técnicas de Programação para WEB. Rodrigo Fernandes de Mello

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Cartão de fidelização de clientes das distribuidoras de combustível.

O que é um framework?

EJB ainda tem vez no Java EE 6? Fernando Lozano Consultor 4Linux

Oportunidades em SP. Experiência no mercado financeiro / instituições bancárias / produtos de tesouraria.

Java Server Faces 2.0 Rich Faces 4.0

PATR IMÔNIO PALEONTOLÓG IC O

SOA Introdução. SOA Visão Departamental das Organizações

OPORTUNIDADES CWI: Analista de Sistemas Sênior

Desenvolvimento Web com Framework Demoiselle versão 1.0

XML e Banco de Dados. Prof. Daniela Barreiro Claro DCC/IM/UFBA

Computação Paralela. Uma framework para aplicações concorrentes João Luís Ferreira Sobral Departamento do Informática Universidade do Minho

RestFull WebServices. Rafael Nunes Arquiteto de Software / Instrutor Globalcode. Globalcode Open4Education

Frameworks - Grails. Aécio Costa

Web Services utilizando JAX-WS

.', HGFEDCBA. M e u s c o m p a n h e iro s e m in h a s c o m p a n h e ira s. M e u s a m ig o s e m in h a s a m ig a s.

Gestão e Tratamento de Informação 1º semestre

Transcrição:

Apache Camel rotas para as suas mensagens Bruno Borges 2009

Apache Camel

Integração SOAP MSMQ JMS RSS FTP JT/400 JDBC SMTP HTTP FIX JBI JPA Twitter SOAP LDAP TCP

Integração

Camel

?

Framework Open Source para Padrões de Integração

EIP Enterprise Integration Patterns

Padrões Roteamento de Mensagens C o n te n t- b a se d R o u te r M e ssa g e F iltec ro m o e vit a r re ce b im e n to d e m e n sa g e n s in d e se ja d a s? S p litte r A g g re g a to r R e se q u e n ce r C o m o t ra t a r u m a situ a çã o o n d e a im p le m e n ta çã o d e u m a f u n çã o ló g ica e st á e sp a lh a d a e m m ú lt ip lo s siste m a s? C o m o p r o ce ssa r u m a m e n sa g e m, se e sta co n t é m e le m e n to s q u e d e ve m se r p ro ce ssa d o s in d ivid u a lm e n t e d e fo rm a s d ife re n t e s? C o m o co m b in a r o re su lta d o d e m e n sa g e n s in d ivid u a is, p o ré m r e la cio n a d a s, n u m a ú n ica sa íd a? C o m o re to m a r a o r d e m d e m e n sa g e n s re la cio n a d a s e n via d a s f o ra d e o rd e m? R e cip ie n t L istc o m o ro te a r u m a m e n sa g e m a u m a list a d in â m ica d e d e st in a rá rio s?

Roteamento mensagem

Linguagens BeanShell SQL JavaScript XPath Groovy XQuery Python JSR 223 Scripting PHP OGNL Ruby EL (JSP/JSF) Scala

Componentes ActiveMQ AMQP Atom / RSS Beans Comet (Jetty) CXF DataSet (testes) Direct File FIX FTP / SFTP Hibernate HL7 MLLP HTTP ibatis JBI / JCR JDBC / JPA JMS JT/400 LDAP LOG Mail Mina MSMQ Quartz RMI Velocity XMPP Xquery... Twitter?

Definição de Rotas CamelContext public class CamelStartup { public static void main(string... args) throws Exception { CamelContext context = new DefaultCamelContext(); context.addroutes(new MyRoute()); context.start(); RouteBuilder DSL Domain Specific Language Java Spring XML Scala

Definição de Rotas Java public class TwitterRoute extends RouteBuilder { public void configure() throws Exception { from("file:outbox").transform(body().converttostring()).to("twitter:tweetit"); from("twitter:tweets?follow=brunoborges").transform(body().converttostring()).to("file:twitters-log");

Definição de Rotas Spring XML <camelcontext xmlns="http://activemq.apache.org/camel/schema/spring"> <route> <from uri="activemq:topic:quotes"/> <filter> <xpath>/quote/product = 'widget'</xpath> <to uri="mqseries:widgetquotes"/> </filter> </route> </camelcontext>

Definição de Rotas Scala class MyRouteBuilder extends RouteBuilder { "direct:a" --> "mock:a" "direct:b" to "mock:b"

Repetindo... Roteamento de Mensagens C o n te n t- b a se d R o u te r M e ssa g e F iltec ro m o e vit a r re ce b im e n to d e m e n sa g e n s in d e se ja d a s? S p litte r A g g re g a to r R e se q u e n ce r C o m o t ra t a r u m a situ a çã o o n d e a im p le m e n ta çã o d e u m a f u n çã o ló g ica e st á e sp a lh a d a e m m ú lt ip lo s siste m a s? C o m o p r o ce ssa r u m a m e n sa g e m, se e sta co n t é m e le m e n to s q u e d e ve m se r p ro ce ssa d o s in d ivid u a lm e n t e d e fo rm a s d ife re n t e s? C o m o co m b in a r o re su lta d o d e m e n sa g e n s in d ivid u a is, p o ré m r e la cio n a d a s, n u m a ú n ica sa íd a? C o m o re to m a r a o r d e m d e m e n sa g e n s re la cio n a d a s e n via d a s f o ra d e o rd e m? R e cip ie n t L istc o m o ro te a r u m a m e n sa g e m a u m a list a d in â m ica d e d e st in a rá rio s?

Content-based Router RouteBuilder route = new RouteBuilder() { public void configure() { from("seda:a").choice().when(header("foo").isequalto("bar")).to("seda:b").when(header("foo").isequalto("cheese")).to("seda:c").otherwise().to("seda:d"); ;

Content-based Router <camelcontext xmlns="http://activemq.apache.org/camel/schema/spring"> <route> <from uri="activemq:neworders" /> <choice> <when> <xpath>/order/product = 'widget'</xpath> <to uri="activemq:orders.widgets" /> </when> <when> <xpath>/order/product = 'gadget'</xpath> <to uri="activemq:orders.gadgets" /> </when> <otherwise> <to uri="activemq:orders.bad" /> </otherwise> </choice> </route> </camelcontext>

Content-based Router "direct:a" ==> { to ("mock:polyglot") choice { when (_.in == "<hello/>") to ("mock:english") when (_.in == "<hallo/>") { to ("mock:dutch") to ("mock:german") otherwise to ("mock:french")

Message Filter public class MyRouteBuilder extends RouteBuilder { public void configure() { from("activemq:topic:quotes").filter().xpath("/quote/product = 'widget'").to("mqseries:widgetquotes");

Message Filter <camelcontext xmlns="http://activemq.apache.org/camel/schema/spring"> <route> <from uri="activemq:topic:quotes" /> <filter> <xpath>/quote/product = 'widget'</xpath> <to uri="mqseries:widgetquotes" /> </filter> </route> </camelcontext>

Message Filter "direct:a" when(_.in == "<hello/>") to("mock:a") "direct:b" ==> { when(_.in == "<hallo/>") { --> ("mock:b") to ("mock:c") otherwise { to ("mock:e") to ("mock:d")

Message Splitter public class MyRouteBuilder extends RouteBuilder { public void configure() { from("file://orders").splitter(body().tokenize("\n")).to("activemq:order.items");

Message Splitter public class MyRouteBuilder extends RouteBuilder { public void configure() { from("file://orders") // Splitter com XQuery.splitter(xquery("/order/items")).to("activemq:Order.Items");

Message Aggregator public class MyRouteBuilder extends RouteBuilder { public void configure() { from("activemq:inventory.items").aggregator().xpath("/order/@id").to("activemq:inventory.order");

Resequencer public class MyRouteBuilder extends RouteBuilder { public void configure() { from("direct:a").resequencer(header("jmspriority")).to("seda:b");

Recipient List public class MyRouteBuilder extends RouteBuilder { public void configure() { from("direct:a").recipientlist(header("destinos"));

Camel Twitter CAMEL-1520

Padrões Tradução de Mensagens M e ssa g e T ra n sla to r C o n te n t E n rich e r C o n te n t F ilte r N o rm a liz e r C o m o sist e m a s u sa n d o d if e re n t e s f o r m a t o s d e m e n sa g e n s p o d e m co m u n ica r-se e n t re si? C o m o se co m u n ica r co m u m sist e m a se a m e n sa g e m d e o rig e m n ã o d isp õ e d e to d o s o s d a d o s n e ce ssá rio s? C o m o sim p lif ica r m e n sa g e n s m u it o g ra n d e s, q u a n d o so m e n te p o u co s d a d o s in t e re ssa m? C o m o p ro ce ssa r m e n sa g e n s se m a n t ica m e n t e sim ila re s, m a s e m d if e re n t e s f o rm a t o s?

Message Translator

Content Enricher

Content Filter

Exemplos from("direct:inicio").process(new Processor() { public void process(exchange exchange) { Message in = exchange.getin(); in.setbody(in.getbody(string.class) + " by Camel!"); ).to("mock:result"); from("direct:inicio").transform(body().append(" Camel!")).to("mock:result"); <camelcontext xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:start" /> <transform> <simple>${in.body extra data!</simple> </transform> <to uri="mock:end" /> </route> </camelcontext>

Normalizer

Dependency Injection Google Guice

Beans

Beans Tradutores public class MinhaRota extends RouteBuilder { @Override public void configure() throws Exception { from("activemq:inbox").beanref("meubean").beanref("meuoutrobean", "metodoqualquer").to("activemq:outbox");

Beans Conversores package org.apache.camel.component.twitter; import java.text.parseexception; import org.apache.camel.converter; @Converter public class TwitterConverter { @Converter public static String tostring(status status) throws ParseException { return status.tostring();

Anotações em Beans public class Foo { public void onbar( @XPath("/foo/bar") String nome, @Header("JMSCorrelationID") String id) { // faz algo

Beans Consumidores public class Foo { @Consume(uri = "jms:queuefoo") public void onfoo( Exchange e, @Header("JMSGroupID") String grupo) { // faz algo

Camel, onde tem? Apache ServiceMix (ESB) OpenESB Apache ActiveMQ FUSE Java Embedded

Monte um Camelo! Perguntas?

Links http://camel.apache.org http://enterpriseintegrationpatterns.com http://www.jawsys.com.br http://blog.brunoborges.com.br