Camel 重新启动使用文件组件初始化的路由不会再次轮询现有文件

uz75evzq  于 2022-11-23  发布在  Apache
关注(0)|答案(1)|浏览(137)

多亏了JMX(Java控制台),我尝试重新启动一个带有文件组件消费者端点的路由。

from("file:<some dir>?noop=true")

我正在使用窃听模式来记录通过其他文件端点的中间数据转换。在第一次启动camel应用程序时,一切都很好,输入目录中已经存在的所有文件都被轮询和处理。
但当我尝试重新启动路由感谢jmx,什么都没有发生。我试图手动删除.camel目录-创建的我猜默认FileIdempotentRepository -在重新启动路由之前,徒劳的。我还试图改变一种IdempotentRepository与MemoryIdempotentRepository:

from("file:<somedir>?noop=true").idempotentConsumer(header("CamelFileName"), MemoryIdempotentRepository.memoryIdempotentRepository(1000))

即使我在java控制台中重新启动路由之前触发了这个MemoryIdempotentRepository的clear()操作,重新启动后也没有从输入目录轮询到任何东西。
如果我添加一个文件,它就能工作。一切都像如果有一个已经轮询过一次的文件的持久历史一样。
我想知道使用选项“noop=true”是否会创建一个我无法用jmx控制的非托管幂等存储库。
如果为true,则不会以任何方式移动或删除文件。此选项适用于只读数据或ETL类型要求。如果noop=true,Camel也将设置idempotent=true,以避免反复使用相同的文件。
有什么想法吗?(我用的是camel-core 2.21)

moiiocjp

moiiocjp1#

我找到了解决我问题的方法。我对idempotentConsumer的使用很糟糕;我需要初始化端点URI参数列表中的端点幂等消费者。
首先,在Bean注册表中创建一个条目:

registry.put("myIdempotentRepository", MemoryIdempotentRepository.memoryIdempotentRepository(1000));

然后,在端点中引用此idempotentRepository

from("file:<somedire>noop=true&initialDelay=10&delay=1000&idempotentRepository=#myIdempotentRepository")

通过执行此操作,GenericFileEndPoint

  • 不会创建默认的idempotentRepository
  • 我会将端点选项中给出的idempotentRepository添加到camel上下文的服务中。这意味着,由于JMX的缘故,可以管理它

我认为允许在camel-core的FileEndPoint类中管理默认的幂等存储库会很有用。

相关问题