JBoss Fuse - Camel Concepts

Neste capítulo, vamos entender os diferentes conceitos de camelo. Vamos começar dando um exemplo básico para entender os conceitos centrais para começar.

CamelContext

Cada aplicativo camelo terá pelo menos um CamelContext. Este é o lugar onde adicionamos rotas de camelos. É similar àApplicationContext da Primavera.

O contexto do camelo pode ser pensado como um contêiner que mantém todas as coisas juntas. Um contexto de camelo pode ter várias rotas dentro dele.

Rotas

CamelContext pode conter uma ou mais rotas. As rotas são a lógica de integração que define como os dados fluirão no contexto do camelo de um ponto final para outro.

Endpoint

Endpoint é o fim do canal através do qual o sistema pode enviar ou receber mensagens. É o que chamamos de destino ou fonte na linguagem da comunicação.

Componentes

Os componentes são pontos de extensão no Camel. Os componentes podem ser uma interface para tecnologia, formato de dados, transformadores, etc. Eles também podem atuar como uma fábrica para terminais.

EIP

EIP significa Enterprise Integration Pattern. Estas são soluções identificadas e bem conhecidas para um problema recorrente. Camel suporta a maioria dos padrões de integração empresarial.

Roteador baseado em conteúdo

Os padrões CBR nos permitem rotear os dados de acordo com o conteúdo do arquivo de entrada.

Este padrão é usado quando temos que rotear valores dependendo do conteúdo do corpo de entrada.

O exemplo a seguir irá ler dados de D:/data/inputdiretório. Após a leitura, ele verificará a tag de valor dentro da tag de dados. Se a tag de valor contémvalue1, será enviado para D:/value1, Se contiver value2, será enviado para D:/value2 e se nenhum desses dois, então será enviado a outros.

<CamelContext xmlns = "http://camel.apache.org/schema/spring">
   <route>
      <from uri = "file:///D:/data/input"/>
      <choice>
         <when>
            <xpath>/data/value = 'value1'</xpath>
            <to uri = "file:///D:/value1"/>
         </when> 
         <when>
            <xpath>/data/value = 'value2'</xpath>
            <to uri = "file:///D:/value2"/>
         </when>  
			
         <otherwise>
            <to uri = "file:///D:/others "/>
         </otherwise>
			
      </choice>
   </route>
</camelContext>

Input

D: /data/input/message1.xml

<data>
   <value>value1</value>
</data>

D: /data/input/message2.xml

<data>
   <value>value2</value>
</data>

Output

D: / valor1 /

<data>
   <value>value1</value>
</data>

D: / valor2 /

<data>
   <value>value2</value>
</data>

Divisor

Um padrão de divisão é usado para dividir os dados de entrada em partes menores.

Esse padrão é usado na maioria das vezes com grandes entradas de dados que precisam ser divididas em blocos, para que possam ser processados. Ele divide a entrada em fragmentos menores com base na string de token de entrada.

<CamelContext xmlns = "http://camel.apache.org/schema/spring">
   <route>
      <from uri = "file:///D:/inbox"/>
      <split streaming = "true">
         <tokenize token = "order" xml = "true"/>
         <to uri = "activemq:queue:order"/>
      </split>
   </route>
</CamelContext>

Input

D: /inbox/message.xml

<order>
   <data>
      <value>value1</value>
   </data>
</order>

<order>
   <data>
      <value>value2</value>
   </data>
</order>

<order>
   <data>
      <value>value3</value>
   </data>
</order>

Output

Se você verificar o AMQ, encontrará 3 mensagens postadas.

<order>
   <data>
      <value>value4</value>
   </data>
</order>

Lista de destinatários

Um padrão de lista de destinatários é usado quando uma lista de destinatários precisa ser recuperada do próprio corpo da mensagem.

No exemplo a seguir, uma mensagem será enviada a todos os destinatários listados na tag do cliente como uma lista de strings separada por vírgulas.

<CamelContext xmlns = "http://camel.apache.org/schema/spring">
   <route>
      <from uri = "jms:xmlOrders" />
      <recipientList>
         <xpath>/order/customer</xpath>
      </recipientList>
   </route>
</camelContext>

Outros EIPs

O Camel oferece suporte a quase todos os EIPs identificados. Alguns dos EIP comumente usados ​​são mencionados abaixo.

  • Log - Para registrar a mensagem completa ou parte dela

  • Message Filter - Filtragem de conteúdo de mensagens

  • Re-Sequencer - Para obter todos os tokens em sequência

  • Wiretap - Para inspecionar mensagens de viagem

A lista completa de EIP e seu uso pode ser encontrada na documentação oficial da Camel http://camel.apache.org/eip.html

Tratamento de exceções em camelo

Using Error Handler - Esta é a maneira mais fácil de lidar com exceções no camelo.

Para usar isso, temos que configurar o bean de classe manipulador de erro e fornecê-lo como referência para CamelContext errorHandlerRef atributo.

<bean id = "loggingErrorHandler" class = "org.apache.camel.builder.LoggingErrorHandler">
   <property name = "logName" value = "mylogger.name"/>
   <property name = "level" value = "DEBUG"/>
</bean>

<camelContext errorHandlerRef = ” loggingErrorHandler” >
   …
</camelContext>

Usando Try Catch Finalmente

Camel também suporta o estilo Java Try Catch Finally block para tratamento de erros.

Assim como o Java, ele tem os três blocos a seguir -

  • doTry bloco contém código que pode gerar exceção.

  • doCatch bloco contém código que precisa ser executado em caso de exceção.

  • doFinallybloco tem código que deve ser executado independentemente da exceção. Ele sempre será executado, não importa se a exceção foi levantada ou não.

Note- Mock é um componente de teste e não é recomendado para outros fins. É o componente no camel usado para teste, assim como o componente jMOck no desenvolvimento dirigido por teste.

<route>
   <from uri = "direct:start"/>
   <doTry>
      <process ref = "someProcesorThatmayFail"/>
      <to uri = "mock:result"/>
		
      <doCatch>
         <exception>java.io.IOException</exception>
         <exception>java.lang.IllegalStateException</exception>
         <to uri = "mock:catch"/>
      </doCatch>
		
      <doFinally>
         <to uri = "mock:finally"/>
      </doFinally>
		
   </doTry>
</route>

No exemplo acima, podemos fornecer uma lista de exceções que precisam ser tratadas pelo bloco catch.

Implantando pacote no fusível

Comece o fusível usando Fuse.bat/start.bat.

Se você iniciar o Fuse usando start.bat, use client.bat para se conectar ao Fuse. Você deve obter a IU conforme mostrado na captura de tela a seguir.

Esta é a CLI para acessar os comandos Karaf e Fuse.

install –s mvn:group.id /artifact.id/version 
e.g. install –s mvn:com.tutorialpoint.app/camel-firt-app/1.0-SNAPSHOT