SlideShare ist ein Scribd-Unternehmen logo
1 von 44
Apache Camel
rotas para as suas mensagens



          Bruno Borges
              2009
Apache Camel
Integração

                  MSMQ      JMS
                                   RSS
         SOAP                             FTP

       JT/400                               JDBC



     SMTP                                       HTTP

        FIX                                 JBI



            JPA                           TCP
                  Twitter          LDAP
                            SOAP
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 seC 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
                            d
       R o u te r          ló g ica e st á e sp a lh a d a e m m ú lt ip lo s siste m a s?

       M e ssa g e F ilteCro 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?
                            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
       S p litte r          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
       A g g re g a to r 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
       R e se q u e n ce r o rd e m ?

       R e cip ie n t L ist 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?
                          C
Roteamento


         ___________
         ___________
         ___________

           ___________
           ______


        mensagem
Linguagens
●   BeanShell    ●   SQL
●   JavaScript   ●   XPath
●   Groovy       ●   XQuery
●   Python       ●   JSR 223 Scripting
●   PHP          ●   OGNL
●   Ruby         ●   EL (JSP/JSF)
●   Scala
Componentes
●   ActiveMQ           ●   JBI / JCR
●   AMQP               ●   JDBC / JPA
●   Atom / RSS         ●   JMS
●   Beans              ●   JT/400
●   Comet (Jetty)      ●   LDAP
●   CXF                ●   LOG
●   DataSet (testes)   ●   Mail
●   Direct             ●   Mina
●   File               ●   MSMQ
●   FIX                ●   Quartz
●   FTP / SFTP         ●   RMI
●   Hibernate          ●   Velocity
●   HL7   MLLP         ●   XMPP
●   HTTP               ●   Xquery
●   iBatis             ●   ... 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 seC 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
                            d
       R o u te r          ló g ica e st á e sp a lh a d a e m m ú lt ip lo s siste m a s?

       M e ssa g e F ilteCro 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?
                            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
       S p litte r          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
       A g g re g a to r 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
       R e se q u e n ce r o rd e m ?

       R e cip ie n t L ist 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?
                          C
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          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
       T ra n sla to r      co m u n ica r-se e n t re si?
       C o n te n t         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
       E n rich e r         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
       C o n te n t F ilte r a d o s in t e re ssa m ?
                           d
                            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
       N o rm a liz e r     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 ?
Perguntas ?
Links
http://camel.apache.org

http://enterpriseintegrationpatterns.com

http://www.jawsys.com.br

http://blog.brunoborges.com.br

Weitere ähnliche Inhalte

Was ist angesagt?

React js - The Core Concepts
React js - The Core ConceptsReact js - The Core Concepts
React js - The Core ConceptsDivyang Bhambhani
 
React JS and why it's awesome
React JS and why it's awesomeReact JS and why it's awesome
React JS and why it's awesomeAndrew Hull
 
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?VMware Tanzu Korea
 
SEO Camp Day Lorraine 2022 par Dan Bernier sur une étude de cas d’une campagn...
SEO Camp Day Lorraine 2022 par Dan Bernier sur une étude de cas d’une campagn...SEO Camp Day Lorraine 2022 par Dan Bernier sur une étude de cas d’une campagn...
SEO Camp Day Lorraine 2022 par Dan Bernier sur une étude de cas d’une campagn...Dan Bernier
 
KPIs, Metrics & Benchmarks That Matter For SEO Success In 2023.pdf
KPIs, Metrics & Benchmarks That Matter For SEO Success In 2023.pdfKPIs, Metrics & Benchmarks That Matter For SEO Success In 2023.pdf
KPIs, Metrics & Benchmarks That Matter For SEO Success In 2023.pdfSearch Engine Journal
 
Mapping out your API Strategy - 4.20.11 Webinar slides
Mapping out your API Strategy - 4.20.11 Webinar slidesMapping out your API Strategy - 4.20.11 Webinar slides
Mapping out your API Strategy - 4.20.11 Webinar slidesApigee | Google Cloud
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Kim Hunmin
 
Swagger With REST APIs.pptx.pdf
Swagger With REST APIs.pptx.pdfSwagger With REST APIs.pptx.pdf
Swagger With REST APIs.pptx.pdfKnoldus Inc.
 
데이터 기반 이커머스 개인화 추천 기획 | 마켓컬리 Market Kurly
데이터 기반 이커머스 개인화 추천 기획 | 마켓컬리 Market Kurly데이터 기반 이커머스 개인화 추천 기획 | 마켓컬리 Market Kurly
데이터 기반 이커머스 개인화 추천 기획 | 마켓컬리 Market KurlyAmelia Choi
 
DDoS - Ataque de negação de serviço
DDoS - Ataque de negação de serviçoDDoS - Ataque de negação de serviço
DDoS - Ataque de negação de serviçoGustavo Neves
 
아마존 웹 서비스 상에서 MS SQL 100% 활용하기::김석원::AWS Summit Seoul 2018
아마존 웹 서비스 상에서 MS SQL 100% 활용하기::김석원::AWS Summit Seoul 2018아마존 웹 서비스 상에서 MS SQL 100% 활용하기::김석원::AWS Summit Seoul 2018
아마존 웹 서비스 상에서 MS SQL 100% 활용하기::김석원::AWS Summit Seoul 2018Amazon Web Services Korea
 
마이크로 서비스 아키텍쳐 소개 및 구현 방법
마이크로 서비스 아키텍쳐 소개 및 구현 방법마이크로 서비스 아키텍쳐 소개 및 구현 방법
마이크로 서비스 아키텍쳐 소개 및 구현 방법Young Soo Lee
 

Was ist angesagt? (20)

React - Introdução
React - IntroduçãoReact - Introdução
React - Introdução
 
React Native Firebase
React Native FirebaseReact Native Firebase
React Native Firebase
 
React js - The Core Concepts
React js - The Core ConceptsReact js - The Core Concepts
React js - The Core Concepts
 
React JS and why it's awesome
React JS and why it's awesomeReact JS and why it's awesome
React JS and why it's awesome
 
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
 
React
React React
React
 
SEO Camp Day Lorraine 2022 par Dan Bernier sur une étude de cas d’une campagn...
SEO Camp Day Lorraine 2022 par Dan Bernier sur une étude de cas d’une campagn...SEO Camp Day Lorraine 2022 par Dan Bernier sur une étude de cas d’une campagn...
SEO Camp Day Lorraine 2022 par Dan Bernier sur une étude de cas d’une campagn...
 
KPIs, Metrics & Benchmarks That Matter For SEO Success In 2023.pdf
KPIs, Metrics & Benchmarks That Matter For SEO Success In 2023.pdfKPIs, Metrics & Benchmarks That Matter For SEO Success In 2023.pdf
KPIs, Metrics & Benchmarks That Matter For SEO Success In 2023.pdf
 
Mapping out your API Strategy - 4.20.11 Webinar slides
Mapping out your API Strategy - 4.20.11 Webinar slidesMapping out your API Strategy - 4.20.11 Webinar slides
Mapping out your API Strategy - 4.20.11 Webinar slides
 
Monitoring Solutions for APIs
Monitoring Solutions for APIsMonitoring Solutions for APIs
Monitoring Solutions for APIs
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까?
 
Swagger With REST APIs.pptx.pdf
Swagger With REST APIs.pptx.pdfSwagger With REST APIs.pptx.pdf
Swagger With REST APIs.pptx.pdf
 
What is Swagger?
What is Swagger?What is Swagger?
What is Swagger?
 
데이터 기반 이커머스 개인화 추천 기획 | 마켓컬리 Market Kurly
데이터 기반 이커머스 개인화 추천 기획 | 마켓컬리 Market Kurly데이터 기반 이커머스 개인화 추천 기획 | 마켓컬리 Market Kurly
데이터 기반 이커머스 개인화 추천 기획 | 마켓컬리 Market Kurly
 
DDoS - Ataque de negação de serviço
DDoS - Ataque de negação de serviçoDDoS - Ataque de negação de serviço
DDoS - Ataque de negação de serviço
 
React/Redux
React/ReduxReact/Redux
React/Redux
 
API Basics
API BasicsAPI Basics
API Basics
 
아마존 웹 서비스 상에서 MS SQL 100% 활용하기::김석원::AWS Summit Seoul 2018
아마존 웹 서비스 상에서 MS SQL 100% 활용하기::김석원::AWS Summit Seoul 2018아마존 웹 서비스 상에서 MS SQL 100% 활용하기::김석원::AWS Summit Seoul 2018
아마존 웹 서비스 상에서 MS SQL 100% 활용하기::김석원::AWS Summit Seoul 2018
 
Is Content The King In Modern SEO?
Is Content The King In Modern SEO?Is Content The King In Modern SEO?
Is Content The King In Modern SEO?
 
마이크로 서비스 아키텍쳐 소개 및 구현 방법
마이크로 서비스 아키텍쳐 소개 및 구현 방법마이크로 서비스 아키텍쳐 소개 및 구현 방법
마이크로 서비스 아키텍쳐 소개 및 구현 방법
 

Andere mochten auch

Presentacio etwinning Secundària
Presentacio etwinning SecundàriaPresentacio etwinning Secundària
Presentacio etwinning Secundàriamartap
 
Our Shared Fashion Mission - form
Our Shared Fashion Mission - formOur Shared Fashion Mission - form
Our Shared Fashion Mission - formmartap
 
Social goes mobile - TNS May 2010
Social goes mobile - TNS May 2010Social goes mobile - TNS May 2010
Social goes mobile - TNS May 2010Mundo Contact
 
Demo-driven innovation (University of Zurich, June 2013)
Demo-driven innovation (University of Zurich, June 2013)Demo-driven innovation (University of Zurich, June 2013)
Demo-driven innovation (University of Zurich, June 2013)Tudor Girba
 
Think tablet first
Think tablet firstThink tablet first
Think tablet firstHenry Jacob
 
Restructuring (EVO 2008)
Restructuring (EVO 2008)Restructuring (EVO 2008)
Restructuring (EVO 2008)Tudor Girba
 
Spanish catalan analysis of the results
Spanish catalan analysis of the resultsSpanish catalan analysis of the results
Spanish catalan analysis of the resultsmartap
 

Andere mochten auch (8)

Presentacio etwinning Secundària
Presentacio etwinning SecundàriaPresentacio etwinning Secundària
Presentacio etwinning Secundària
 
Our Shared Fashion Mission - form
Our Shared Fashion Mission - formOur Shared Fashion Mission - form
Our Shared Fashion Mission - form
 
Social goes mobile - TNS May 2010
Social goes mobile - TNS May 2010Social goes mobile - TNS May 2010
Social goes mobile - TNS May 2010
 
Sonrie siempre
Sonrie siempreSonrie siempre
Sonrie siempre
 
Demo-driven innovation (University of Zurich, June 2013)
Demo-driven innovation (University of Zurich, June 2013)Demo-driven innovation (University of Zurich, June 2013)
Demo-driven innovation (University of Zurich, June 2013)
 
Think tablet first
Think tablet firstThink tablet first
Think tablet first
 
Restructuring (EVO 2008)
Restructuring (EVO 2008)Restructuring (EVO 2008)
Restructuring (EVO 2008)
 
Spanish catalan analysis of the results
Spanish catalan analysis of the resultsSpanish catalan analysis of the results
Spanish catalan analysis of the results
 

Ähnlich wie Apache Camel: rotas para as suas mensagens

[245] presto 내부구조 파헤치기
[245] presto 내부구조 파헤치기[245] presto 내부구조 파헤치기
[245] presto 내부구조 파헤치기NAVER D2
 
Presto anatomy
Presto anatomyPresto anatomy
Presto anatomyDongmin Yu
 
Spring scala - Sneaking Scala into your corporation
Spring scala  - Sneaking Scala into your corporationSpring scala  - Sneaking Scala into your corporation
Spring scala - Sneaking Scala into your corporationHenryk Konsek
 
Microservices With Spring Boot and Spring Cloud Netflix
Microservices With Spring Boot and Spring Cloud NetflixMicroservices With Spring Boot and Spring Cloud Netflix
Microservices With Spring Boot and Spring Cloud NetflixKrzysztof Sobkowiak
 
Playing with d3.js
Playing with d3.jsPlaying with d3.js
Playing with d3.jsmangoice
 
49368010 projectreportontraininganddevelopment(1)
49368010 projectreportontraininganddevelopment(1)49368010 projectreportontraininganddevelopment(1)
49368010 projectreportontraininganddevelopment(1)Kritika910
 
SAI - Serverless Integration Architectures - 09/2019
SAI - Serverless Integration Architectures - 09/2019SAI - Serverless Integration Architectures - 09/2019
SAI - Serverless Integration Architectures - 09/2019Samuel Vandecasteele
 
루비가 얼랭에 빠진 날
루비가 얼랭에 빠진 날루비가 얼랭에 빠진 날
루비가 얼랭에 빠진 날Sukjoon Kim
 
Python RESTful webservices with Python: Flask and Django solutions
Python RESTful webservices with Python: Flask and Django solutionsPython RESTful webservices with Python: Flask and Django solutions
Python RESTful webservices with Python: Flask and Django solutionsSolution4Future
 
AFUP Lorraine - Symfony Webpack Encore
AFUP Lorraine - Symfony Webpack EncoreAFUP Lorraine - Symfony Webpack Encore
AFUP Lorraine - Symfony Webpack EncoreEngineor
 
Bonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node jsBonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node jsFrancois Zaninotto
 
Web enabling your survey business
Web enabling your survey businessWeb enabling your survey business
Web enabling your survey businessRudy Stricklan
 
Xke - Introduction to Apache Camel
Xke - Introduction to Apache CamelXke - Introduction to Apache Camel
Xke - Introduction to Apache CamelAlexis Kinsella
 
Velocity EU 2012 - Third party scripts and you
Velocity EU 2012 - Third party scripts and youVelocity EU 2012 - Third party scripts and you
Velocity EU 2012 - Third party scripts and youPatrick Meenan
 
Service Oriented Integration With ServiceMix
Service Oriented Integration With ServiceMixService Oriented Integration With ServiceMix
Service Oriented Integration With ServiceMixBruce Snyder
 
Let's talks about string operations in C++17
Let's talks about string operations in C++17Let's talks about string operations in C++17
Let's talks about string operations in C++17Bartlomiej Filipek
 
Angular js活用事例:filydoc
Angular js活用事例:filydocAngular js活用事例:filydoc
Angular js活用事例:filydocKeiichi Kobayashi
 
Taking Apache Camel For A Ride
Taking Apache Camel For A RideTaking Apache Camel For A Ride
Taking Apache Camel For A RideBruce Snyder
 

Ähnlich wie Apache Camel: rotas para as suas mensagens (20)

[245] presto 내부구조 파헤치기
[245] presto 내부구조 파헤치기[245] presto 내부구조 파헤치기
[245] presto 내부구조 파헤치기
 
Presto anatomy
Presto anatomyPresto anatomy
Presto anatomy
 
Spring scala - Sneaking Scala into your corporation
Spring scala  - Sneaking Scala into your corporationSpring scala  - Sneaking Scala into your corporation
Spring scala - Sneaking Scala into your corporation
 
Microservices With Spring Boot and Spring Cloud Netflix
Microservices With Spring Boot and Spring Cloud NetflixMicroservices With Spring Boot and Spring Cloud Netflix
Microservices With Spring Boot and Spring Cloud Netflix
 
Playing with d3.js
Playing with d3.jsPlaying with d3.js
Playing with d3.js
 
49368010 projectreportontraininganddevelopment(1)
49368010 projectreportontraininganddevelopment(1)49368010 projectreportontraininganddevelopment(1)
49368010 projectreportontraininganddevelopment(1)
 
SAI - Serverless Integration Architectures - 09/2019
SAI - Serverless Integration Architectures - 09/2019SAI - Serverless Integration Architectures - 09/2019
SAI - Serverless Integration Architectures - 09/2019
 
루비가 얼랭에 빠진 날
루비가 얼랭에 빠진 날루비가 얼랭에 빠진 날
루비가 얼랭에 빠진 날
 
Python RESTful webservices with Python: Flask and Django solutions
Python RESTful webservices with Python: Flask and Django solutionsPython RESTful webservices with Python: Flask and Django solutions
Python RESTful webservices with Python: Flask and Django solutions
 
AFUP Lorraine - Symfony Webpack Encore
AFUP Lorraine - Symfony Webpack EncoreAFUP Lorraine - Symfony Webpack Encore
AFUP Lorraine - Symfony Webpack Encore
 
Bonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node jsBonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node js
 
JavaFX, because you're worth it
JavaFX, because you're worth itJavaFX, because you're worth it
JavaFX, because you're worth it
 
Web enabling your survey business
Web enabling your survey businessWeb enabling your survey business
Web enabling your survey business
 
Xke - Introduction to Apache Camel
Xke - Introduction to Apache CamelXke - Introduction to Apache Camel
Xke - Introduction to Apache Camel
 
Velocity EU 2012 - Third party scripts and you
Velocity EU 2012 - Third party scripts and youVelocity EU 2012 - Third party scripts and you
Velocity EU 2012 - Third party scripts and you
 
Riding Apache Camel
Riding Apache CamelRiding Apache Camel
Riding Apache Camel
 
Service Oriented Integration With ServiceMix
Service Oriented Integration With ServiceMixService Oriented Integration With ServiceMix
Service Oriented Integration With ServiceMix
 
Let's talks about string operations in C++17
Let's talks about string operations in C++17Let's talks about string operations in C++17
Let's talks about string operations in C++17
 
Angular js活用事例:filydoc
Angular js活用事例:filydocAngular js活用事例:filydoc
Angular js活用事例:filydoc
 
Taking Apache Camel For A Ride
Taking Apache Camel For A RideTaking Apache Camel For A Ride
Taking Apache Camel For A Ride
 

Mehr von Bruno Borges

Secrets of Performance Tuning Java on Kubernetes
Secrets of Performance Tuning Java on KubernetesSecrets of Performance Tuning Java on Kubernetes
Secrets of Performance Tuning Java on KubernetesBruno Borges
 
[Outdated] Secrets of Performance Tuning Java on Kubernetes
[Outdated] Secrets of Performance Tuning Java on Kubernetes[Outdated] Secrets of Performance Tuning Java on Kubernetes
[Outdated] Secrets of Performance Tuning Java on KubernetesBruno Borges
 
From GitHub Source to GitHub Release: Free CICD Pipelines For JavaFX Apps
From GitHub Source to GitHub Release: Free CICD Pipelines For JavaFX AppsFrom GitHub Source to GitHub Release: Free CICD Pipelines For JavaFX Apps
From GitHub Source to GitHub Release: Free CICD Pipelines For JavaFX AppsBruno Borges
 
Making Sense of Serverless Computing
Making Sense of Serverless ComputingMaking Sense of Serverless Computing
Making Sense of Serverless ComputingBruno Borges
 
Visual Studio Code for Java and Spring Developers
Visual Studio Code for Java and Spring DevelopersVisual Studio Code for Java and Spring Developers
Visual Studio Code for Java and Spring DevelopersBruno Borges
 
Taking Spring Apps for a Spin on Microsoft Azure Cloud
Taking Spring Apps for a Spin on Microsoft Azure CloudTaking Spring Apps for a Spin on Microsoft Azure Cloud
Taking Spring Apps for a Spin on Microsoft Azure CloudBruno Borges
 
A Look Back at Enterprise Integration Patterns and Their Use into Today's Ser...
A Look Back at Enterprise Integration Patterns and Their Use into Today's Ser...A Look Back at Enterprise Integration Patterns and Their Use into Today's Ser...
A Look Back at Enterprise Integration Patterns and Their Use into Today's Ser...Bruno Borges
 
Melhore o Desenvolvimento do Time com DevOps na Nuvem
Melhore o Desenvolvimento do Time com DevOps na NuvemMelhore o Desenvolvimento do Time com DevOps na Nuvem
Melhore o Desenvolvimento do Time com DevOps na NuvemBruno Borges
 
Tecnologias Oracle em Docker Containers On-premise e na Nuvem
Tecnologias Oracle em Docker Containers On-premise e na NuvemTecnologias Oracle em Docker Containers On-premise e na Nuvem
Tecnologias Oracle em Docker Containers On-premise e na NuvemBruno Borges
 
Java EE Arquillian Testing with Docker & The Cloud
Java EE Arquillian Testing with Docker & The CloudJava EE Arquillian Testing with Docker & The Cloud
Java EE Arquillian Testing with Docker & The CloudBruno Borges
 
Migrating From Applets to Java Desktop Apps in JavaFX
Migrating From Applets to Java Desktop Apps in JavaFXMigrating From Applets to Java Desktop Apps in JavaFX
Migrating From Applets to Java Desktop Apps in JavaFXBruno Borges
 
Servidores de Aplicação: Por quê ainda precisamos deles?
Servidores de Aplicação: Por quê ainda precisamos deles?Servidores de Aplicação: Por quê ainda precisamos deles?
Servidores de Aplicação: Por quê ainda precisamos deles?Bruno Borges
 
Build and Monitor Cloud PaaS with JVM’s Nashorn JavaScripts [CON1859]
Build and Monitor Cloud PaaS with JVM’s Nashorn JavaScripts [CON1859]Build and Monitor Cloud PaaS with JVM’s Nashorn JavaScripts [CON1859]
Build and Monitor Cloud PaaS with JVM’s Nashorn JavaScripts [CON1859]Bruno Borges
 
Cloud Services for Developers: What’s Inside Oracle Cloud for You? [CON1861]
Cloud Services for Developers: What’s Inside Oracle Cloud for You? [CON1861]Cloud Services for Developers: What’s Inside Oracle Cloud for You? [CON1861]
Cloud Services for Developers: What’s Inside Oracle Cloud for You? [CON1861]Bruno Borges
 
Booting Up Spring Apps on Lightweight Cloud Services [CON10258]
Booting Up Spring Apps on Lightweight Cloud Services [CON10258]Booting Up Spring Apps on Lightweight Cloud Services [CON10258]
Booting Up Spring Apps on Lightweight Cloud Services [CON10258]Bruno Borges
 
Java EE Application Servers: Containerized or Multitenant? Both! [CON7506]
Java EE Application Servers: Containerized or Multitenant? Both! [CON7506]Java EE Application Servers: Containerized or Multitenant? Both! [CON7506]
Java EE Application Servers: Containerized or Multitenant? Both! [CON7506]Bruno Borges
 
Running Oracle WebLogic on Docker Containers [BOF7537]
Running Oracle WebLogic on Docker Containers [BOF7537]Running Oracle WebLogic on Docker Containers [BOF7537]
Running Oracle WebLogic on Docker Containers [BOF7537]Bruno Borges
 
Lightweight Java in the Cloud
Lightweight Java in the CloudLightweight Java in the Cloud
Lightweight Java in the CloudBruno Borges
 
Tweet for Beer - Beertap Powered by Java Goes IoT, Cloud, and JavaFX
Tweet for Beer - Beertap Powered by Java Goes IoT, Cloud, and JavaFXTweet for Beer - Beertap Powered by Java Goes IoT, Cloud, and JavaFX
Tweet for Beer - Beertap Powered by Java Goes IoT, Cloud, and JavaFXBruno Borges
 
Integrando Oracle BPM com Java EE e WebSockets
Integrando Oracle BPM com Java EE e WebSocketsIntegrando Oracle BPM com Java EE e WebSockets
Integrando Oracle BPM com Java EE e WebSocketsBruno Borges
 

Mehr von Bruno Borges (20)

Secrets of Performance Tuning Java on Kubernetes
Secrets of Performance Tuning Java on KubernetesSecrets of Performance Tuning Java on Kubernetes
Secrets of Performance Tuning Java on Kubernetes
 
[Outdated] Secrets of Performance Tuning Java on Kubernetes
[Outdated] Secrets of Performance Tuning Java on Kubernetes[Outdated] Secrets of Performance Tuning Java on Kubernetes
[Outdated] Secrets of Performance Tuning Java on Kubernetes
 
From GitHub Source to GitHub Release: Free CICD Pipelines For JavaFX Apps
From GitHub Source to GitHub Release: Free CICD Pipelines For JavaFX AppsFrom GitHub Source to GitHub Release: Free CICD Pipelines For JavaFX Apps
From GitHub Source to GitHub Release: Free CICD Pipelines For JavaFX Apps
 
Making Sense of Serverless Computing
Making Sense of Serverless ComputingMaking Sense of Serverless Computing
Making Sense of Serverless Computing
 
Visual Studio Code for Java and Spring Developers
Visual Studio Code for Java and Spring DevelopersVisual Studio Code for Java and Spring Developers
Visual Studio Code for Java and Spring Developers
 
Taking Spring Apps for a Spin on Microsoft Azure Cloud
Taking Spring Apps for a Spin on Microsoft Azure CloudTaking Spring Apps for a Spin on Microsoft Azure Cloud
Taking Spring Apps for a Spin on Microsoft Azure Cloud
 
A Look Back at Enterprise Integration Patterns and Their Use into Today's Ser...
A Look Back at Enterprise Integration Patterns and Their Use into Today's Ser...A Look Back at Enterprise Integration Patterns and Their Use into Today's Ser...
A Look Back at Enterprise Integration Patterns and Their Use into Today's Ser...
 
Melhore o Desenvolvimento do Time com DevOps na Nuvem
Melhore o Desenvolvimento do Time com DevOps na NuvemMelhore o Desenvolvimento do Time com DevOps na Nuvem
Melhore o Desenvolvimento do Time com DevOps na Nuvem
 
Tecnologias Oracle em Docker Containers On-premise e na Nuvem
Tecnologias Oracle em Docker Containers On-premise e na NuvemTecnologias Oracle em Docker Containers On-premise e na Nuvem
Tecnologias Oracle em Docker Containers On-premise e na Nuvem
 
Java EE Arquillian Testing with Docker & The Cloud
Java EE Arquillian Testing with Docker & The CloudJava EE Arquillian Testing with Docker & The Cloud
Java EE Arquillian Testing with Docker & The Cloud
 
Migrating From Applets to Java Desktop Apps in JavaFX
Migrating From Applets to Java Desktop Apps in JavaFXMigrating From Applets to Java Desktop Apps in JavaFX
Migrating From Applets to Java Desktop Apps in JavaFX
 
Servidores de Aplicação: Por quê ainda precisamos deles?
Servidores de Aplicação: Por quê ainda precisamos deles?Servidores de Aplicação: Por quê ainda precisamos deles?
Servidores de Aplicação: Por quê ainda precisamos deles?
 
Build and Monitor Cloud PaaS with JVM’s Nashorn JavaScripts [CON1859]
Build and Monitor Cloud PaaS with JVM’s Nashorn JavaScripts [CON1859]Build and Monitor Cloud PaaS with JVM’s Nashorn JavaScripts [CON1859]
Build and Monitor Cloud PaaS with JVM’s Nashorn JavaScripts [CON1859]
 
Cloud Services for Developers: What’s Inside Oracle Cloud for You? [CON1861]
Cloud Services for Developers: What’s Inside Oracle Cloud for You? [CON1861]Cloud Services for Developers: What’s Inside Oracle Cloud for You? [CON1861]
Cloud Services for Developers: What’s Inside Oracle Cloud for You? [CON1861]
 
Booting Up Spring Apps on Lightweight Cloud Services [CON10258]
Booting Up Spring Apps on Lightweight Cloud Services [CON10258]Booting Up Spring Apps on Lightweight Cloud Services [CON10258]
Booting Up Spring Apps on Lightweight Cloud Services [CON10258]
 
Java EE Application Servers: Containerized or Multitenant? Both! [CON7506]
Java EE Application Servers: Containerized or Multitenant? Both! [CON7506]Java EE Application Servers: Containerized or Multitenant? Both! [CON7506]
Java EE Application Servers: Containerized or Multitenant? Both! [CON7506]
 
Running Oracle WebLogic on Docker Containers [BOF7537]
Running Oracle WebLogic on Docker Containers [BOF7537]Running Oracle WebLogic on Docker Containers [BOF7537]
Running Oracle WebLogic on Docker Containers [BOF7537]
 
Lightweight Java in the Cloud
Lightweight Java in the CloudLightweight Java in the Cloud
Lightweight Java in the Cloud
 
Tweet for Beer - Beertap Powered by Java Goes IoT, Cloud, and JavaFX
Tweet for Beer - Beertap Powered by Java Goes IoT, Cloud, and JavaFXTweet for Beer - Beertap Powered by Java Goes IoT, Cloud, and JavaFX
Tweet for Beer - Beertap Powered by Java Goes IoT, Cloud, and JavaFX
 
Integrando Oracle BPM com Java EE e WebSockets
Integrando Oracle BPM com Java EE e WebSocketsIntegrando Oracle BPM com Java EE e WebSockets
Integrando Oracle BPM com Java EE e WebSockets
 

Kürzlich hochgeladen

Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGSujit Pal
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 

Kürzlich hochgeladen (20)

Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAG
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 

Apache Camel: rotas para as suas mensagens

  • 1. Apache Camel rotas para as suas mensagens Bruno Borges 2009
  • 3. Integração MSMQ JMS RSS SOAP FTP JT/400 JDBC SMTP HTTP FIX JBI JPA TCP Twitter LDAP SOAP
  • 6. ?
  • 7. Framework Open Source para Padrões de Integração
  • 8. EIP ● Enterprise Integration Patterns
  • 9. Padrões Roteamento de Mensagens C o n te n t- b a seC 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 d R o u te r ló g ica e st á e sp a lh a d a e m m ú lt ip lo s siste m a s? M e ssa g e F ilteCro 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? 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 S p litte r 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 A g g re g a to r 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 R e se q u e n ce r o rd e m ? R e cip ie n t L ist 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? C
  • 10. Roteamento ___________ ___________ ___________ ___________   ______ mensagem
  • 11. Linguagens ● BeanShell ● SQL ● JavaScript ● XPath ● Groovy ● XQuery ● Python ● JSR 223 Scripting ● PHP ● OGNL ● Ruby ● EL (JSP/JSF) ● Scala
  • 12. Componentes ● ActiveMQ ● JBI / JCR ● AMQP ● JDBC / JPA ● Atom / RSS ● JMS ● Beans ● JT/400 ● Comet (Jetty) ● LDAP ● CXF ● LOG ● DataSet (testes) ● Mail ● Direct ● Mina ● File ● MSMQ ● FIX ● Quartz ● FTP / SFTP ● RMI ● Hibernate ● Velocity ● HL7   MLLP ● XMPP ● HTTP ● Xquery ● iBatis ● ... Twitter ?
  • 13. 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
  • 14. 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"); } }
  • 15. 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>
  • 16. Definição de Rotas ● Scala class MyRouteBuilder extends RouteBuilder { "direct:a" --> "mock:a" "direct:b" to "mock:b" }
  • 17. Repetindo ... Roteamento de Mensagens C o n te n t- b a seC 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 d R o u te r ló g ica e st á e sp a lh a d a e m m ú lt ip lo s siste m a s? M e ssa g e F ilteCro 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? 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 S p litte r 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 A g g re g a to r 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 R e se q u e n ce r o rd e m ? R e cip ie n t L ist 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? C
  • 18. 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"); } };
  • 19. 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>
  • 20. 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") } }
  • 21. Message Filter public class MyRouteBuilder extends RouteBuilder { public void configure() { from("activemq:topic:Quotes") .filter() .xpath("/quote/product = 'widget'") .to("mqseries:WidgetQuotes"); } }
  • 22. 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>
  • 23. 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") }
  • 24. Message Splitter public class MyRouteBuilder extends RouteBuilder { public void configure() { from("file://orders") .splitter(body().tokenize("n")) .to("activemq:Order.Items"); } }
  • 25. Message Splitter public class MyRouteBuilder extends RouteBuilder { public void configure() { from("file://orders") // Splitter com XQuery .splitter(xquery("/order/items")) .to("activemq:Order.Items"); } }
  • 26. Message Aggregator public class MyRouteBuilder extends RouteBuilder { public void configure() { from("activemq:Inventory.Items") .aggregator().xpath("/order/@id") .to("activemq:Inventory.Order"); } }
  • 27. Resequencer public class MyRouteBuilder extends RouteBuilder { public void configure() { from("direct:a") .resequencer(header("JMSPriority")) .to("seda:b"); } }
  • 28. Recipient List public class MyRouteBuilder extends RouteBuilder { public void configure() { from("direct:a") .recipientList(header("destinos")); } }
  • 29. Camel Twitter CAMEL-1520
  • 30. Padrões Tradução de Mensagens M e ssa g e 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 T ra n sla to r co m u n ica r-se e n t re si? C o n te n t 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 E n rich e r 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 C o n te n t F ilte r a d o s in t e re ssa m ? d 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 N o rm a liz e r d if e re n t e s f o rm a t o s?
  • 34. 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>
  • 36. Dependency Injection Google Guice
  • 37. Beans
  • 38. Beans Tradutores public class MinhaRota extends RouteBuilder { @Override public void configure() throws Exception { from("activemq:Inbox") .beanRef("meuBean") .beanRef("meuOutroBean", "metodoQualquer") .to("activemq:Outbox"); } }
  • 39. 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(); } }
  • 40. Anotações em Beans public class Foo { public void onBar( @XPath("/foo/bar") String nome, @Header("JMSCorrelationID") String id) { // faz algo } }
  • 41. Beans Consumidores public class Foo { @Consume(uri = "jms:queueFoo") public void onFoo( Exchange e, @Header("JMSGroupID") String grupo) { // faz algo } }
  • 42. Camel, onde tem? ● Apache ServiceMix (ESB) ● OpenESB ● Apache ActiveMQ ● FUSE ● Java Embedded
  • 43. Monte um Camelo! Perguntas ? Perguntas ?