Hi Yeah its a limitation that idempontentKey can only use the information from the file itself such as its name, size, modification timestamp etc. Not a custom hashcode.
On Tue, Jul 9, 2019 at 7:22 PM Deepak Anand <deepakanand2...@gmail.com> wrote: > > Thanks Claus for you response. > The same files can be present in different sub directory , so I need > checksum to identify them. > How in the file endpoint I can generate the checksum and add it to the > idempotentRepository . > May be a silly question but I am new to Camel earlier I was generating the > checksum of the file in the processor and adding it to the header and > passing it to the idempotent consumer > > Thanks and Regards > Deepak Anand > > > On Tue, Jul 9, 2019 at 6:08 PM Claus Ibsen <claus.ib...@gmail.com> wrote: > > > Set idempotentRepository on the file endpoint instead and remove > > idempotent consumer in the route. > > > > On Tue, Jul 9, 2019 at 7:01 PM Deepak Anand <deepakanand2...@gmail.com> > > wrote: > > > > > > Hi Devs , > > > > > > I have a requirement to read from a directory where there are no of files > > > in the subdirectories of it . I am using the camel File component for it > > . > > > I don't want to process the same file which has been processed earlier > > > using an idempotentConsumer and using RedisCache for it. > > > In the cache I am adding the checksum to identify the duplicate file. The > > > problem is that after reading more than 1000 files the same files(which > > > were read earlier) are being read again and again which I don't want . > > > Below is the snippet of the camel route > > > > > > from("file://" + sourceLoc + "/?recursive=true&noop=true" > > > > > +"&idempotent=true&idempotentKey=${file:name}-${file:modified}&readLockRemoveOnCommit=false") > > > .log("the read file is > > > ${file:name}-${file:modified} ") > > > .filter() > > > .method(SourceMinAgeFilter.class, "accept") > > > .process("checksumprocessor") > > > .idempotentConsumer(header("fileCheckSum"), > > > > > > RedisIdempotentRepository.redisIdempotentRepository(stringredisTemplate, > > > redisStoragename)) > > > .eager(true) > > > .skipDuplicate(false) > > > .choice() > > > > > > .when(exchangeProperty(Exchange.DUPLICATE_MESSAGE).isEqualTo(true)) > > > .log("file ${file:onlyname} is a duplicate and hence > > > skipped.") > > > .otherwise() > > > .process("fileprocessor") > > > .log("processed file name from Source Folder" + > > > ("${file:onlyname}")) > > > .log("Total time to process a file : from Source Folder > > " + > > > (System.currentTimeMillis() - starttime) + " ms").end(); > > > > > > Could you please let me know what needs to be done so that the same file > > is > > > not read again and again. Since I am using RedisCache it is not getting > > > processed as the checksum is same but I don't want to read the file again > > > that has been processed > > > > > > Thanks and Regards > > > Deepak Anand > > > > > > > > -- > > Claus Ibsen > > ----------------- > > http://davsclaus.com @davsclaus > > Camel in Action 2: https://www.manning.com/ibsen2 > > -- Claus Ibsen ----------------- http://davsclaus.com @davsclaus Camel in Action 2: https://www.manning.com/ibsen2