SlideShare uma empresa Scribd logo
1 de 23
Baixar para ler offline
Apache Camel, Twitter e
Enterprise Integration Patterns
                      @brunoborge
                        05/07/201
                         #TDC201
Agenda

 ●   O que é o Camel (resumo)
 ●   Enterprise Integration Patterns
 ●   Scala DSL
 ●   Camel Twitter
     ●   Idéia
     ●   Tentativa #1
     ●   Reboot
     ●   Demo
 ●   Camel CDI
O que é?




           Framework de Integração
            Implementação de EIPs
EIP ?!?!

  ●   Por que precisamos de
      Integração?
  ●   Por que é tão difícil?
  ●   Arquiteturas de Mensagens
      Assíncronas
  ●   Como os padrões podem
      ajudar?
Apache Camel: resumão

 ●   Endpoints
     ●   Consumers
     ●   Producers
     ●   Processors
Apache Camel

                    Filtrar
                  Mensagens




                              MQ B


           MQ A
Apache Camel

                      Filtrar
                    Mensagens




                                MQ B


             MQ A




        From MQ A     Filtrar    To MQ B
Apache Camel

                      Filtrar
                    Mensagens




                                 MQ B


             MQ A




        from(mqA)     filter()    to(mqB)
Scala DSL

      "direct:a" when(_.in == "<hello/>") to("direct:b")

      "direct:b" ==> {
        when(_.in == "<hallo/>") {
          to ("mock:c")
        } otherwise {
          to ("mock:e")
        }
        to ("mock:d")
      }
Apache Camel

 ●   Enterprise Integration Patterns
 ●   Roteamento de Mensagens
 ●   DSLs: java, xml, scala
 ●   Endpoints
 ●   URIs
 ●   Predicados e Expressões
 ●   Uma penca de componentes
     ●   JMS, HTTP, MINA, JDBC, FTP, WebService,
         EJB, Hibernate/JPA, IRC, JCR, AS/400, LDAP,
         Mail, Nagios, POP, Impressoras, Quartz,
         Restlet, RMI, RSS, Scalate, XMPP... (como
         falei: uma penca)
Apache Camel

 ●   Muito
      mais padrões



www.eaipatterns.com

camel.apache.org
Camel Twitter: a ideia inicial– Março 2009

                      http://blog.brunoborges.com.br/2009/03/leverage-eip-with-apache-camel-and.html
Camel Twitter: proposto para a ASF em
2009

 ●   CAMEL-1520
     ●   https://issues.apache.org/jira/browse/CAMEL-1520
 ●   Apresentei no BarCamp da ApacheCon NA 2009
 ●   Conversas com committers do Camel na
     ApacheCon, me induziram a tentar fazer um
     componente mais abrangente p/ outras redes
     sociais
 ●   Desafio: mesmo formato Endpoint URI e features
     de diferentes Redes Sociais (“social data
     providers”). Oferecer Facebook, Twitter, LinkedIn,
     Foursquare, e (o já morto) Google Buzz
Camel Social: tentativa mal sucedida

 ●   Iniciado en 2010
 ●   Objetivo
     ●   O objetivo do componente Camel Social era obter
         dados sociais de diferentes redes de uma forma
         padronizada para serem processados através de
         uma rota do Apache Camel
 ●   Problema
     ●   Dados Sociais são difíceis de serem padronizados
     ●   Apesar de o Spring Social fazer um bom trabalho,
         não é uma API só para todas as redes
 ●   http://code.google.com/p/camel-social
 ●   Died in 2010
Camel Twitter: obrigado GitHub!

 ●   Maio 2011 – Projeto reiniciado no GitHub
 ●   http://github.com/brunoborges/camel-twitter
 ●   Colaboração do Brett Meyer, o cara que finalizou o
     serviço
     ●   @brettemeyer
 ●   Foco somente no Twitter
 ●   Brett adicionou suporte também para a API de
     Streaming do Twitter
     ●   E muito mais
Twitter
Twitter
Twitter
Camel Twitter

 ●   Features
     ●   Enviar e ler DMs
     ●   Tuitar (óbvio!)
     ●   Pesquisar
          ●   REST ou Streaming
     ●   Timeline
          ●   Home
                                  * a partir da versão 2.10.0
          ●   Mentions
          ●   Public
          ●   Retweets for me
          ●   User timeline
Camel Twitter

                  "jms:queue:tweetingQueue0" to """twitter://timeline/user?
Criar um             consumerKey=[s]&
                     consumerSecret=[s]&
Status Update        accessToken=[s]&
                     accessTokenSecret=[s]"""

                  "jms:queue:tweetingQueue1" to "twitter://timeline/user”




Ler uma          "twitter://timeline/home?type=polling&delay=5" ==> {
Timeline            to("log:homeTweets")
                 }




                "direct:doSearch" to "twitter://search?keywords=TDC2012"
Fazer buscas
                "direct:doSearch" ==> {
fixas ou          setHeader("CamelTwitterKeywords", "TDC2012")
dinâmicas         to("twitter://search")
                }
Camel CDI


                         Java EE 6




            * a partir da versão 2.10.0
Camel CDI

 ●   Features
     ●   Permite usar o contexto CDI para injeção de
         dependências
     ●   Não é mais necessário usar o Spring (exceto se
         quiser usar o XML DSL)
     ●   Não é mais necessário usar um módulo Web (WAR)
         para inicializar o contexto do Camel (independente
         se usa ou não, Spring)
     ●   Inicialização com @Singleton @Startup


     ●   Ainda em “beta”, apesar de estar no 2.10.0
Obrigado




            Bruno Borges
           bruno.borges@oracle.com
               brunoborges.com
                @brunoborges

Mais conteúdo relacionado

Mais procurados

Criando uma aplicação simples com ruby on rails
Criando uma aplicação simples com ruby on railsCriando uma aplicação simples com ruby on rails
Criando uma aplicação simples com ruby on railsCOTIC-PROEG (UFPA)
 
Curso de Ruby on Rails
Curso de Ruby on RailsCurso de Ruby on Rails
Curso de Ruby on RailsCJR, UnB
 
APIs do Jeito Certo
APIs do Jeito CertoAPIs do Jeito Certo
APIs do Jeito CertoRavan Scafi
 
Introdução ao Flyway
Introdução ao FlywayIntrodução ao Flyway
Introdução ao FlywayJadson Santos
 
Laravel 5: Entenda o ambiente e a estrutura MVC
 Laravel 5: Entenda o ambiente e a estrutura MVC Laravel 5: Entenda o ambiente e a estrutura MVC
Laravel 5: Entenda o ambiente e a estrutura MVCMichael Douglas
 
Usando Git na Unity - Gaming For All 2021
Usando Git na Unity - Gaming For All 2021Usando Git na Unity - Gaming For All 2021
Usando Git na Unity - Gaming For All 2021Erik Cruz
 
Performance do ASP.NET Core, um comparativo com Node.js
Performance do ASP.NET Core, um comparativo com Node.jsPerformance do ASP.NET Core, um comparativo com Node.js
Performance do ASP.NET Core, um comparativo com Node.jsWaldyr Felix
 
Devfest Cerrado: Angular 2
Devfest Cerrado: Angular 2 Devfest Cerrado: Angular 2
Devfest Cerrado: Angular 2 Loiane Groner
 
Angular 2 em 60 minutos
Angular 2 em 60 minutosAngular 2 em 60 minutos
Angular 2 em 60 minutosLoiane Groner
 
Devise - RSLA - 13oct2009
Devise - RSLA - 13oct2009Devise - RSLA - 13oct2009
Devise - RSLA - 13oct2009Plataformatec
 
Evoluindo bancos de dados com Flyway
Evoluindo bancos de dados com FlywayEvoluindo bancos de dados com Flyway
Evoluindo bancos de dados com FlywayVitor Albuquerque
 
Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)Joao Lucas Santana
 
Evitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel HomesteadEvitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel HomesteadDanilo Esser
 

Mais procurados (20)

Criando uma aplicação simples com ruby on rails
Criando uma aplicação simples com ruby on railsCriando uma aplicação simples com ruby on rails
Criando uma aplicação simples com ruby on rails
 
Curso de Ruby on Rails
Curso de Ruby on RailsCurso de Ruby on Rails
Curso de Ruby on Rails
 
APIs do Jeito Certo
APIs do Jeito CertoAPIs do Jeito Certo
APIs do Jeito Certo
 
Aula Ruby
Aula RubyAula Ruby
Aula Ruby
 
Introdução ao Flyway
Introdução ao FlywayIntrodução ao Flyway
Introdução ao Flyway
 
Rails na pratica
Rails na praticaRails na pratica
Rails na pratica
 
React Native na globo.com
React Native na globo.comReact Native na globo.com
React Native na globo.com
 
Laravel 5: Entenda o ambiente e a estrutura MVC
 Laravel 5: Entenda o ambiente e a estrutura MVC Laravel 5: Entenda o ambiente e a estrutura MVC
Laravel 5: Entenda o ambiente e a estrutura MVC
 
Cucumber
CucumberCucumber
Cucumber
 
Usando Git na Unity - Gaming For All 2021
Usando Git na Unity - Gaming For All 2021Usando Git na Unity - Gaming For All 2021
Usando Git na Unity - Gaming For All 2021
 
Performance do ASP.NET Core, um comparativo com Node.js
Performance do ASP.NET Core, um comparativo com Node.jsPerformance do ASP.NET Core, um comparativo com Node.js
Performance do ASP.NET Core, um comparativo com Node.js
 
Meetup #17
Meetup #17Meetup #17
Meetup #17
 
Devfest Cerrado: Angular 2
Devfest Cerrado: Angular 2 Devfest Cerrado: Angular 2
Devfest Cerrado: Angular 2
 
Angular 2 em 60 minutos
Angular 2 em 60 minutosAngular 2 em 60 minutos
Angular 2 em 60 minutos
 
Devise - RSLA - 13oct2009
Devise - RSLA - 13oct2009Devise - RSLA - 13oct2009
Devise - RSLA - 13oct2009
 
Evoluindo bancos de dados com Flyway
Evoluindo bancos de dados com FlywayEvoluindo bancos de dados com Flyway
Evoluindo bancos de dados com Flyway
 
Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)
 
Curso de ReactJS
Curso de ReactJSCurso de ReactJS
Curso de ReactJS
 
Principais Tecnologias WEB
Principais Tecnologias WEBPrincipais Tecnologias WEB
Principais Tecnologias WEB
 
Evitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel HomesteadEvitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel Homestead
 

Destaque

Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Railstchandy
 
Projeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordProjeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordtchandy
 
Rubysoc final RubyConfBR
Rubysoc final RubyConfBRRubysoc final RubyConfBR
Rubysoc final RubyConfBRtchandy
 
Visual Studio Summit 2013 - Patterns para criação de camadas de acesso a dados
Visual Studio Summit 2013 - Patterns para criação de camadas de acesso a dadosVisual Studio Summit 2013 - Patterns para criação de camadas de acesso a dados
Visual Studio Summit 2013 - Patterns para criação de camadas de acesso a dadosFernando Henrique
 
Design Patterns with Python - Is it possible ? - Part 01
Design Patterns with Python -  Is it possible ? - Part 01 Design Patterns with Python -  Is it possible ? - Part 01
Design Patterns with Python - Is it possible ? - Part 01 Marcel Caraciolo
 

Destaque (6)

Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Rails
 
Projeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordProjeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecord
 
Patterns vs zombies
Patterns vs zombiesPatterns vs zombies
Patterns vs zombies
 
Rubysoc final RubyConfBR
Rubysoc final RubyConfBRRubysoc final RubyConfBR
Rubysoc final RubyConfBR
 
Visual Studio Summit 2013 - Patterns para criação de camadas de acesso a dados
Visual Studio Summit 2013 - Patterns para criação de camadas de acesso a dadosVisual Studio Summit 2013 - Patterns para criação de camadas de acesso a dados
Visual Studio Summit 2013 - Patterns para criação de camadas de acesso a dados
 
Design Patterns with Python - Is it possible ? - Part 01
Design Patterns with Python -  Is it possible ? - Part 01 Design Patterns with Python -  Is it possible ? - Part 01
Design Patterns with Python - Is it possible ? - Part 01
 

Semelhante a Twitter, Apache Camel e Enterprise Integration Patterns

Divirta-se com Apache Camel, Twitter e Enterprise Integration Patterns
Divirta-se com Apache Camel, Twitter e Enterprise Integration PatternsDivirta-se com Apache Camel, Twitter e Enterprise Integration Patterns
Divirta-se com Apache Camel, Twitter e Enterprise Integration PatternsBruno Borges
 
Introdução à Programação Web com Angular
Introdução à Programação Web com AngularIntrodução à Programação Web com Angular
Introdução à Programação Web com AngularElmano Cavalcanti
 
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...tdc-globalcode
 
Produtividade em Integração de Aplicações com Apache Camel
Produtividade em Integração de Aplicações com Apache CamelProdutividade em Integração de Aplicações com Apache Camel
Produtividade em Integração de Aplicações com Apache CamelAlessandro Kieras
 
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-...
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-...Produtividade em integração de aplicações com apache camel tdc2012-são paulo-...
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-...Adriano Tavares
 
Tendências do Mercado de Internet
Tendências do Mercado de InternetTendências do Mercado de Internet
Tendências do Mercado de InternetVanessa Oliveira
 
Drupal 8: desenvolvendo fora da ilha
Drupal 8: desenvolvendo fora da ilhaDrupal 8: desenvolvendo fora da ilha
Drupal 8: desenvolvendo fora da ilhaLuiz Filho
 
Meetup ScalaCamp Curitiba, Fevereiro de 2017, Parte II
Meetup ScalaCamp Curitiba, Fevereiro de 2017, Parte IIMeetup ScalaCamp Curitiba, Fevereiro de 2017, Parte II
Meetup ScalaCamp Curitiba, Fevereiro de 2017, Parte IIMauricio Fernandes de Castro
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorAllyson Barros
 
Source-to-container no mundo real
Source-to-container no mundo realSource-to-container no mundo real
Source-to-container no mundo realEvandro Silvestre
 
Tudo que você precisa saber sobre as principais alterações no Drupal 8
Tudo que você precisa saber sobre as principais alterações no Drupal 8 Tudo que você precisa saber sobre as principais alterações no Drupal 8
Tudo que você precisa saber sobre as principais alterações no Drupal 8 Acquia
 
Machine Learning: Do Notebook ao modelo em produção
Machine Learning: Do Notebook ao modelo em produçãoMachine Learning: Do Notebook ao modelo em produção
Machine Learning: Do Notebook ao modelo em produçãoMarlesson Santana
 
Construindo portlets para IBM WebSphere Portal – Parte 1
Construindo portlets para IBM WebSphere Portal – Parte 1Construindo portlets para IBM WebSphere Portal – Parte 1
Construindo portlets para IBM WebSphere Portal – Parte 1rodrigoareis
 
Workshop Performance Rails
Workshop Performance RailsWorkshop Performance Rails
Workshop Performance RailsVitor Pellegrino
 
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeçaTrês anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeçaFelipe Hummel
 
Por que Cloud Services é o melhor dos mundos?
Por que Cloud Services é o melhor dos mundos? Por que Cloud Services é o melhor dos mundos?
Por que Cloud Services é o melhor dos mundos? Fabrício Lopes Sanchez
 
Angular Extreme Performance
Angular  Extreme PerformanceAngular  Extreme Performance
Angular Extreme PerformanceGustavo Costa
 
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando PimentaIniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando Pimentamichel adriano medeiros
 

Semelhante a Twitter, Apache Camel e Enterprise Integration Patterns (20)

Divirta-se com Apache Camel, Twitter e Enterprise Integration Patterns
Divirta-se com Apache Camel, Twitter e Enterprise Integration PatternsDivirta-se com Apache Camel, Twitter e Enterprise Integration Patterns
Divirta-se com Apache Camel, Twitter e Enterprise Integration Patterns
 
Introdução à Programação Web com Angular
Introdução à Programação Web com AngularIntrodução à Programação Web com Angular
Introdução à Programação Web com Angular
 
Cloudformation
CloudformationCloudformation
Cloudformation
 
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
 
Produtividade em Integração de Aplicações com Apache Camel
Produtividade em Integração de Aplicações com Apache CamelProdutividade em Integração de Aplicações com Apache Camel
Produtividade em Integração de Aplicações com Apache Camel
 
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-...
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-...Produtividade em integração de aplicações com apache camel tdc2012-são paulo-...
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-...
 
Tendências do Mercado de Internet
Tendências do Mercado de InternetTendências do Mercado de Internet
Tendências do Mercado de Internet
 
Drupal 8: desenvolvendo fora da ilha
Drupal 8: desenvolvendo fora da ilhaDrupal 8: desenvolvendo fora da ilha
Drupal 8: desenvolvendo fora da ilha
 
Meetup ScalaCamp Curitiba, Fevereiro de 2017, Parte II
Meetup ScalaCamp Curitiba, Fevereiro de 2017, Parte IIMeetup ScalaCamp Curitiba, Fevereiro de 2017, Parte II
Meetup ScalaCamp Curitiba, Fevereiro de 2017, Parte II
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
 
Source-to-container no mundo real
Source-to-container no mundo realSource-to-container no mundo real
Source-to-container no mundo real
 
Tudo que você precisa saber sobre as principais alterações no Drupal 8
Tudo que você precisa saber sobre as principais alterações no Drupal 8 Tudo que você precisa saber sobre as principais alterações no Drupal 8
Tudo que você precisa saber sobre as principais alterações no Drupal 8
 
Machine Learning: Do Notebook ao modelo em produção
Machine Learning: Do Notebook ao modelo em produçãoMachine Learning: Do Notebook ao modelo em produção
Machine Learning: Do Notebook ao modelo em produção
 
Construindo portlets para IBM WebSphere Portal – Parte 1
Construindo portlets para IBM WebSphere Portal – Parte 1Construindo portlets para IBM WebSphere Portal – Parte 1
Construindo portlets para IBM WebSphere Portal – Parte 1
 
Workshop Performance Rails
Workshop Performance RailsWorkshop Performance Rails
Workshop Performance Rails
 
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeçaTrês anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeça
 
Por que Cloud Services é o melhor dos mundos?
Por que Cloud Services é o melhor dos mundos? Por que Cloud Services é o melhor dos mundos?
Por que Cloud Services é o melhor dos mundos?
 
Angular Extreme Performance
Angular  Extreme PerformanceAngular  Extreme Performance
Angular Extreme Performance
 
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando PimentaIniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
 
Csharp
CsharpCsharp
Csharp
 

Mais de 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
 

Mais de 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
 

Twitter, Apache Camel e Enterprise Integration Patterns

  • 1. Apache Camel, Twitter e Enterprise Integration Patterns @brunoborge 05/07/201 #TDC201
  • 2. Agenda ● O que é o Camel (resumo) ● Enterprise Integration Patterns ● Scala DSL ● Camel Twitter ● Idéia ● Tentativa #1 ● Reboot ● Demo ● Camel CDI
  • 3. O que é? Framework de Integração Implementação de EIPs
  • 4. EIP ?!?! ● Por que precisamos de Integração? ● Por que é tão difícil? ● Arquiteturas de Mensagens Assíncronas ● Como os padrões podem ajudar?
  • 5. Apache Camel: resumão ● Endpoints ● Consumers ● Producers ● Processors
  • 6. Apache Camel Filtrar Mensagens MQ B MQ A
  • 7. Apache Camel Filtrar Mensagens MQ B MQ A From MQ A Filtrar To MQ B
  • 8. Apache Camel Filtrar Mensagens MQ B MQ A from(mqA) filter() to(mqB)
  • 9. Scala DSL "direct:a" when(_.in == "<hello/>") to("direct:b") "direct:b" ==> { when(_.in == "<hallo/>") { to ("mock:c") } otherwise { to ("mock:e") } to ("mock:d") }
  • 10. Apache Camel ● Enterprise Integration Patterns ● Roteamento de Mensagens ● DSLs: java, xml, scala ● Endpoints ● URIs ● Predicados e Expressões ● Uma penca de componentes ● JMS, HTTP, MINA, JDBC, FTP, WebService, EJB, Hibernate/JPA, IRC, JCR, AS/400, LDAP, Mail, Nagios, POP, Impressoras, Quartz, Restlet, RMI, RSS, Scalate, XMPP... (como falei: uma penca)
  • 11. Apache Camel ● Muito mais padrões www.eaipatterns.com camel.apache.org
  • 12. Camel Twitter: a ideia inicial– Março 2009 http://blog.brunoborges.com.br/2009/03/leverage-eip-with-apache-camel-and.html
  • 13. Camel Twitter: proposto para a ASF em 2009 ● CAMEL-1520 ● https://issues.apache.org/jira/browse/CAMEL-1520 ● Apresentei no BarCamp da ApacheCon NA 2009 ● Conversas com committers do Camel na ApacheCon, me induziram a tentar fazer um componente mais abrangente p/ outras redes sociais ● Desafio: mesmo formato Endpoint URI e features de diferentes Redes Sociais (“social data providers”). Oferecer Facebook, Twitter, LinkedIn, Foursquare, e (o já morto) Google Buzz
  • 14. Camel Social: tentativa mal sucedida ● Iniciado en 2010 ● Objetivo ● O objetivo do componente Camel Social era obter dados sociais de diferentes redes de uma forma padronizada para serem processados através de uma rota do Apache Camel ● Problema ● Dados Sociais são difíceis de serem padronizados ● Apesar de o Spring Social fazer um bom trabalho, não é uma API só para todas as redes ● http://code.google.com/p/camel-social ● Died in 2010
  • 15. Camel Twitter: obrigado GitHub! ● Maio 2011 – Projeto reiniciado no GitHub ● http://github.com/brunoborges/camel-twitter ● Colaboração do Brett Meyer, o cara que finalizou o serviço ● @brettemeyer ● Foco somente no Twitter ● Brett adicionou suporte também para a API de Streaming do Twitter ● E muito mais
  • 19. Camel Twitter ● Features ● Enviar e ler DMs ● Tuitar (óbvio!) ● Pesquisar ● REST ou Streaming ● Timeline ● Home * a partir da versão 2.10.0 ● Mentions ● Public ● Retweets for me ● User timeline
  • 20. Camel Twitter "jms:queue:tweetingQueue0" to """twitter://timeline/user? Criar um consumerKey=[s]& consumerSecret=[s]& Status Update accessToken=[s]& accessTokenSecret=[s]""" "jms:queue:tweetingQueue1" to "twitter://timeline/user” Ler uma "twitter://timeline/home?type=polling&delay=5" ==> { Timeline to("log:homeTweets") } "direct:doSearch" to "twitter://search?keywords=TDC2012" Fazer buscas "direct:doSearch" ==> { fixas ou setHeader("CamelTwitterKeywords", "TDC2012") dinâmicas to("twitter://search") }
  • 21. Camel CDI Java EE 6 * a partir da versão 2.10.0
  • 22. Camel CDI ● Features ● Permite usar o contexto CDI para injeção de dependências ● Não é mais necessário usar o Spring (exceto se quiser usar o XML DSL) ● Não é mais necessário usar um módulo Web (WAR) para inicializar o contexto do Camel (independente se usa ou não, Spring) ● Inicialização com @Singleton @Startup ● Ainda em “beta”, apesar de estar no 2.10.0
  • 23. Obrigado Bruno Borges bruno.borges@oracle.com brunoborges.com @brunoborges