Hi Onder,
I reproduced this issue with the current trunk too.


Ihe issue is caused by the "sendEmptyMessageWhenIdle=true" option on the file consumer. That causes an exchange with an empty body to be queued which isn't read. When there is a file available, a new exchange is queued with the file contents but the previously queued empty message is returned. If a second file is put in the folder and the rest endpoint is triggered again, the previously queued file is returned.

The workaround is to remove the sendEmptyMessageWhenIdle option or set it to false, and set a timeout (0 will work) on the pollEnrich. Then your route works as you expect since when no file is available the file consumer returns no result and the enricher sends an empty body.

Hope this helps,
Karen


On 05/08/2021 13:48, Onder SEZGIN wrote:
extra info:

it keeps logging No files found.. skipping to send to S3
which possibly means that file is not getting picked up.
and
camel version is 3.7.5

thanks

On Thu, Aug 5, 2021 at 12:17 PM Onder SEZGIN <ondersez...@gmail.com> wrote:

Hello,

After a while i am taking a ride with newer versions of camel, and i have
a usecase to create a restful endpoint which will trigger uploading a file
from a preconfigured directory to s3 bucket.

so below if we endpoint is called and there is no file in the directory it
logs nothing to upload but later if i place a file under the directory and
make an api call to upload endpoint again, it does not pick up the file?

Any idea is appreciated, i kind of doubt about default aggregation part of
pollEnrich pattern but i am not sure.

Thanks
Onder

rest()
         .path("/v1/upload")
         .consumes("application/json")
         .produces("application/text")
         .post()
         .type(Void.class)
         .to("direct:uploadFiles");

from("direct:uploadFiles")
         
.pollEnrich("file:{{shared-folder}}?include=.*.gz&delete=true&sendEmptyMessageWhenIdle=true")
         .choice()
           .when(body().isNull()).log("No files found.. skipping to send to S3")
           .otherwise().to("direct:toAwsS3")
         .endChoice();



Reply via email to