Repositório destinado para o estudo sobre Apache Camel e construção de rotas.
- Sobre o Apache Camel
Essencialmente, o Apache Camel é um roteador (routing engine), ou seja o Camel roteia os dados entre dois endpoints. Cabe ao programador definir a origem dos dados (from), o seu destino (to), e a forma com a qual ele será processado (mediation engine).
from("file:pedidos?noop=true"). // a origem de onde o Apache Camel irá buscar os dados
to("file:saida"); // o destino o qual após ele ser processado ele irá nos dar a saída, neste caso, estou fazendo uma transferência de arquivo.
Um dos princípios fundamentais do Camel é que ele não determina o tipo de dado que precisa ser transacionado. Este alto nível de abstração facilita a interação com vários sistemas porque aproveita-se a mesma API, independentemente do protocolo ou tipo de dado utilizado.
O Camel é uma máquina de roteamento, onde você fala de onde vêm os dados e para onde vão e ele faz alguma coisa no meio. Camel é uma biblioteca em que você pode utilizar standalone, ou seja, separado, ou integrar com algum projeto existente.
2. Utilizando a Camel DSL
A domain-specific language (DSL) do Camel suporta linguagens como Java, Scala, Groovy e também permite que regras de roteamento sejam especificadas em XML. O objetivo da DSL é permitir que o desenvolvedor se concentre no negócio e não na ferramenta de integração.
public class RotaPedidos {
public static void main(String[] args) throws Exception {
CamelContext context = new DefaultCamelContext();
context.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("file:pedidos?noop=true").
to("file:saida");
}
context.start();
Thread.sleep(20000);
context.stop();
});
}
}
Dentro do método configure é a onde deve ser implementada toda lógica da rota com base nos métodos from() e to(). Ao executar o método main, os arquivos do diretório pedidos serão transferidos para o diretório saida.
No Camel, as rotas interligam os endpoints determinados pelos métodos from() e to(), sendo origem e o destino, respectivamente. O paramêtro desses metódos são fornecidos atráves de URIs de acordo com o componente usado.
Identificador de Recursos Universal, como diz o próprio nome, é o identificador do recurso. Pode ser uma imagem, uma página, etc, pois tudo o que está disponível na internet precisa de um identificador único para que não seja confundido.
Vamos usar o exemplo em nosso exemplo de como está acontecendo essa mágica da URI, beleza?! Utilizando como parâmetro do método from() do Bloco 1, podemos ver a seguinte estrutura:
Todas as URIs seguem o mesmo template: componente:parametros?opções. O primeiro elemente vai ser o responsável de referência o componente o qual estamos usando para podermos ler os dados na entrada da rota, e com base nas especificaçoes dele, são definidos os parâmetros e as opções.