多亏了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)
1条答案
按热度按时间moiiocjp1#
我找到了解决我问题的方法。我对
idempotentConsumer
的使用很糟糕;我需要初始化端点URI参数列表中的端点幂等消费者。首先,在Bean注册表中创建一个条目:
然后,在端点中引用此
idempotentRepository
:通过执行此操作,
GenericFileEndPoint
:idempotentRepository
idempotentRepository
添加到camel上下文的服务中。这意味着,由于JMX的缘故,可以管理它我认为允许在camel-core的
FileEndPoint
类中管理默认的幂等存储库会很有用。