O Apache Camel é um framework de integração open-source baseado em padrões de integração. Ele implementa vários padrões do livro Enterprise Integration Patterns – The Book de Gregor Hohpe e Bobby Woolf, visando facilitar integrações entre sistemas. O projeto Camel, teve o inicio em 2007 sobre licença Apache 2 , o código do Apache Camel está disponível no Github .

Para utilizar o Camel é necessário somente o jar do projeto. É possível integrar o Camel com frameworks de Injeção de Dependências, como Spring e o Juice. Ele utiliza uma DSL Java para implementar os padrões de integração.
Vamos mostrar alguns padrões de integração que são implementados pelo Camel:

  • Message Router – Em cima de alguma informação do conteúdo da mensagem que está sendo integrada, é possível tomar a decisão de qual será o destino dessa mensagem.
RouteBuilder builder = new RouteBuilder() {
    public void configure() {
        from("direct:a")
            .choice()
                .when(header("foo").isEqualTo("bar"))
                    .to("direct:b")
                .when(header("foo").isEqualTo("cheese"))
                    .to("direct:c")
                .otherwise()
                    .to("direct:d");
    }
};
  • Message Translator – Dado que dois sistemas se comunicam com um modelo de dados distinto, é necessário traduzir essa mensagem entre o sistema de origem e destino. Com esse padrão, é possível traduzir essa mensagem entre os dois sistemas. Por exemplo, transformar um arquivo TXT e um JSON.
from("activemq:SomeQueue").
  beanRef("myTransformerBean", "myMethodName").
  to("mqseries:AnotherQueue");
  • Publish Subscribe Channel – Esse padrão é muito legal. Com ele é possível enviar uma mensagem para vários destinos. Por exemplo, escrever um XML em disco, enviar por email e salvar no Amazon S3.
RouteBuilder builder = new RouteBuilder() {
    public void configure() {
        from("direct:a")
            .multicast().to("email", "file", "amazon s3");
    }
};
  • Splitter – Com o Splitter é possível dividir uma mensagem em várias outras. Com isso ele pode processar individualmente cada parte dessa mensagem, ou até processar de forma simultânea cada pedaço dessa mensagem utilizando Threads.
RouteBuilder builder = new RouteBuilder() {
    public void configure() {
        from("direct:a")
            .split(body(String.class).tokenize("n"))
                .to("direct:b");
    }
};
  • Dead Letter Channel – Esse é muito interessante, pois ele garante que em caso de indisponibilidade do sistema de destino, ele irá realizar um número “x” de tentativas de enviar essa mensagem, respeitando um tempo entre cada tentativa. Mesmo assim não sendo possível entregar, ele envia uma Dead Letter Channel.
errorHandler(deadLetterChannel("jms:queue:dead")
    .maximumRedeliveries(3).redeliveryDelay(5000));

Aqui no site do Apache Camel, é possível verificar seus outros padrões.
Outro recurso muito bom do Camel são os componentes. Os componentes são baseados em URI, segue alguns componentes:

  • File Component – Permite acesso à arquivos em um sistema de arquivos.

from("file:inbox?charset=utf-8").convertBodyTo(byte[].class, "iso-8859-1").to("bean:myBean").to("file:outbox");

  • HTTP4 Component – Comunicação HTTP.

from("direct:start").to("http4://oldhost?order=123&detail=short");
  • Twitter – Permite integração com as API’s do Twitter.

from("twitter://search?type=direct&keywords=camel&consumerKey=[s]&consumerSecret=[s]&accessToken=[s]&accessTokenSecret=[s]")
  .to("bean:TTs");
  • S3 Component – Permite integração com o Amazon S3

from("aws-s3://MyBucket?amazonS3Client=#client&delay=5000&maxMessagesPerPoll=5").to("bean:result");

Nesse link é possível encontrar outros componentes do Camel.
O Apache Camel facilita muito a integração entre sistemas, fornecendo muitos recursos já prontos, o que ajuda na produtividade e também reduz a quantidade de BUG’s.

Marcus Barcelos

Autor

André Faria Gomes é executivo, empreendedor, investidor, mentor, gerente, escritor, palestrante, podcaster e agilista. Atualmente, é CEO da Bluesoft em São Paulo, investidor e membro do conselho da Wow e mentor da Liga Ventures.

2 Comentários

  1. Muito bacana, sempre achei o projeto interessante, mas nunca tive a chance de utiliza-lo.
    Durante os estudos e leituras sobre ele eu vi gente falando que uma das desvantagens do Camel está na alta abstração (sim, além de também ser uma vantagem), pois no momento em que ocorre um erro fica difícil rastrear onde de fato o problema ocorreu devido a toda essa abstração que ele provê. Daí algo que poderia ser simples de resolver se torna complexo.
    Como tem sido a experiência de vocês em relação a isto?
    Ah! E que tipos de componentes vocês utilizaram do Camel?
    Enfim, parabéns pelo post, não conhecia essa API Java dele, muito bom!

Deixe aqui o seu comentário