Apache Camel FTP

Dando continuidade ao meu aprendizado do Apache Camel, minha missão agora é fazer uma transferência de arquivos usando a FTP com a spring DSL. Seguindo a documentção da Apache montei uma rota para conectar em um servidor FTP que criei localmente com o FileZilla server. Abaixo a rota que montei

rota_ftp

No código acima a tag me conecta ao servidor FTP e a tag me indica para onde os arquivos do ftp serão transferidos.
Sobre as opções existentes no componente FTP, usei os seguintes :
uri: indicando a url do meu servidor FTP. No meu caso é localhost com porta default (21), pois estou usando um ftp local criado com o FileZilla.

username e password: São os dados de autenticação no FTP. move:Move indica que os arquivos que eu ler e transferir pelo FTP devem ser transferidos para uma pasta de backup no FTP. No meu caso especifiquei a pasta .done, porém um detalhe muito interessante aqui é que eu quis mover estes arquivos renomeando sua extensão para .bak. Para isso usei um recurso do Apache Camel conhecido como File Expression Language. A expressão ${file:name.noext}.bak me garante renomear somente a extensão do arquivo.

disconnect: Setei para true para forçar a desconexão do FTP após a transferência do arquivo, assim não fico com uma conexão aberta sem usar.

filter: Filter é uma classe que criei para filtrar os arquivos que eu quero que sejam transferidos pelo FTP. No meu caso eu criei um filtro para transferir somente arquivos com extensão .xml e .dtd

Código da classe de filro (FileFilter.java)

package com.conecta.soa.billing.message.filter;

import java.io.File;

import org.apache.camel.component.file.GenericFile;
import org.apache.camel.component.file.GenericFileFilter;

/**
 * Filtro para o componente File do camel, para permitir que somente arquivos XML sejam processados em um endpoint.
 * @author Rogério Santos
 *
 */

public class FileFilter implements GenericFileFilter {

     public boolean accept(GenericFile pathname) {      
        boolean valid = false;	   
        if (pathname.getFileName().toLowerCase().endsWith(".xml") || pathname.getFileName().toLowerCase().endsWith(".dtd")) {
               valid = true;
         }      	   
         return valid;   
     }
}

Indo um pouco mais a frente uma option que se mostrou bastante útil foi a delay. Como usei a opção para desconectar (disconnect:) apos baixar os arquivos, a rota fica em um loop desconectando e reconectando logo em seguida. Para evitar isso a option delay permite estipular em milissegundos o tempo que se deve aguardar antes da rota reconectar-se com o FTP.

 ...filter=#fileFilter&delay=10000

Acima digo que a rota so deve se reconectar ao FTP após 10 segundos após a desconexão.

Referências
Apache Camel FTP Component
File Expression Language
FileZilla Server Download

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s