He primavera siguiente configuración

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://camel.apache.org/schema/spring 
       http://camel.apache.org/schema/spring/camel-spring.xsd">

    <bean id="downloadLogger" class="com.thomsonreuters.oa.sdi.camel.DownloadLogger" />

    <bean id="fileFilter" class="com.thomsonreuters.oa.sdi.camel.IgnoreReadyFilesFilter" />

    <camelContext xmlns="http://camel.apache.org/schema/spring">
        <route>
            <from uri="ftp://url_to_ftp?password=*******&amp;noop=true&amp;stepwise=false&amp;binary=true&amp;consumer.delay=10s&amp;recursive=true&amp;filter=#fileFilter" />
            <process ref="downloadLogger" />
            <to uri="file:data/outbox" />
        </route>
    </camelContext>

</beans>

Al ftp lado tengo 3 carpetas con los archivos que quiero descargar. Quiero lograr el siguiente escenario:

  1. En ftp es la cantidad fija de archivos (por isntance 5) en la primera de extracción de datos de consumo de las cargas de estos archivos a la carpeta de destino
  2. En el segundo intento de cargar los archivos, ftp estado de la misma (5 archivos) y el camello ftp consumidor no hace nada (a excepción de verificación para los archivos nuevos)
  3. A ftp llega nuevo 2 archivos, y en este los datos de extracción de los consumidores de descargas sólo estos dos nuevos archivos

En el momento en que mis soluciones actuales descargas de todos los archivos cada vez cuando ejecuto dataload proceso, ¿cómo puedo gestionar la información acerca de los archivos descargados, para evitar descargas de duplicados (me refiero a que ya copiados los archivos de ftp), puedo escribir mi propio filtro que se va a filtrar ya descargado los archivos pero creo que no debería ser construido en función de la cual me dará controle de esto (tal vez idempotentRepository, en realidad no estoy seguro)…

¿Qué versión de Camello estás usando? Y los 5 archivos están en la misma carpeta, o en los diferentes sub-carpetas?
El camello es la versión 2.7.0. Hay 1 directorio raíz con 3 subcarpetas, cada una de las subcarpetas puede contener un número diferente de archivos. Para ser más específicos, permite considerar que una subcarpeta inicialmente contiene 5 archivos y, a continuación, a esta carpeta llega a 2 más archivos. Y quiero evitar la descarga de archivos que ya está en la carpeta de destino.
Hmm noop=true implicaría idempotente así. Pero prueba a activarlo usando idempotente=true en la uri
Mi aplicación se ejecuta de forma independiente, y parece que idempotente repositorio funciona, pero sólo en la memoria, así que una vez que todos los archivos se han descargado camello simplemente se detiene y hacer revisión periódica de ftp remoto para los nuevos archivos (comportamiento correcto). Pero cuando voy a terminar mi aplicación independiente y ejecute de nuevo se empieza a descargar todos los archivos de nuevo. Parece que necesito un poco de persistencia idempotente repositorio, tal vez basada en un archivo…

OriginalEl autor endryha | 2011-04-18

3 Comentarios

  1. 12

    Necesita usar un persistente idempotente repositorio si desea Camello ser capaz de recordar cuáles son los archivos que previamente se han descargado, entre reinicios.

    Que usted necesita para establecer esta opción en el ftp extremo: idempotentRepository

    Ver más detalles aquí: http://camel.apache.org/file2
    (Nota: El componente FTP hereda las opciones en el archivo de componente).

    Hay algunos ejemplos en la página wiki de cómo utilizar las diferentes tiendas. Y también se puede construir personalizado de la tienda.

    Gracias, esto es exactamente lo que quiero lograr.

    OriginalEl autor Claus Ibsen

  2. 4

    Finalmente termino con la siguiente solución:

    public class SdiRouteBuilder extends RouteBuilder {
        @Override
        public void configure() throws Exception {
            from("ftp://[email protected]_to_ftp/RootFolder?" +
                    "password=******&noop=true&stepwise=false&binary=true&consumer.delay=10s&recursive=true&filter=#fileFilter")
                    .idempotentConsumer(header("CamelFileName"), FileIdempotentRepository.fileIdempotentRepository(new File("data", "repo.dat")))
                    .process(new DownloadLogger())
                    .to("file:data/outbox");
        }
    }
    Gracias por esta sugerencia. Parece que no trabajan directamente para el ftp (configuración de propiedades para el archivo de los consumidores). parece que solo trabaja si el uso de idempotentConsumer en la ruta.

    OriginalEl autor endryha

  3. 1

    Tal vez @endryha responder a funcionar bien en el 2011, pero no con Camello 2.20.1

    En Camello 2.20.1, estos código creará dos idempotentRepository

    1. ftp por defecto de la memoria idempotentRepository
    2. idempotentConsumer personalizado idempotentRepository(archivo de base en este caso)

    Por lo que la manera correcta de usar idempotentRepository (I eliminar la mayoría de los parámetros para mejorar la legibilidad)

    "ftp://[email protected]_to_ftp/RootFolder?&idempotent=true&idempotentRepository=#myIdempotentRepo"

    y un Bean

    @Bean
    private IdempotentRepository<String> myIdempotentRepo() {
        return FileIdempotentRepository.fileIdempotentRepository(new File("data", "repo.dat");
    }

    OriginalEl autor user1686407

Dejar respuesta

Please enter your comment!
Please enter your name here