I需要在集群环境中完全实现idempotentRepository。
<route id="request" >
<from uri="file:someFolderLocation?readLock=idempotent&readLockRemoveOnCommit=true"/>
<to uri="file: someOtherFolderLocation "/>我在集群环境上使用camel,并且希望在我的文件使用者端点上使用readlock。唯一的集群安全重新锁定是幂等式重新锁,但是这需要在文件uri上设置一个idempotentRepository。
Caused by: java.lang.IllegalArgumentException: IdempotentRepository must be configured when using readLock=idempotent
at org.apache.camel.component.file.GenericFileEndpoint.doStart(GenericFileEndpoint.java:1328)
at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
at org.apache.camel.impl.DefaultCamelContext.startService(DefaultCamelContext.java:3269)
at org.apache.camel.impl.DefaultCamelContext.doAddService(DefaultCamelContext.java:1243)
at org.apache.camel.impl.DefaultCamelContext.addService(DefaultCamelContext.java:1204)
at org.apache.camel.impl.DefaultCamelContext.addService(DefaultCamelContext.java:1200)
at org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:584)
... 40 more请指点。
发布于 2017-05-18 04:53:59
如果您有共享的文件系统,您可以使用FileIdempotentRepository,希望它对您有用。
readLockRemoveOnCommit=true -此选项允许指定在处理文件成功并发生提交时是否从幂等存储库中删除文件名条目。
readLockRemoveOnRollback=true -This选项允许指定是否在处理文件失败并发生回滚时从幂等存储库中删除文件名条目。
以下是FileIdempotentRepository的实现
<bean id="myFileStore" class="org.apache.camel.processor.idempotent.FileIdempotentRepository">
<property name="fileStore" value="/shared/myFileStore.txt"/>
<property name="maxFileStoreSize" value="512000000"/>
<property name="cacheSize" value="100000"/>
</bean>
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route id="request" >
<from uri="file:someFolderLocation?readLock=idempotent&idempotentRepository=#myFileStore&readLockRemoveOnCommit=true&readLockRemoveOnRollback=true/>
<to uri="file: someOtherFolderLocation "/>
</route>
</camelContext>发布于 2017-05-17 15:32:11
这里有一些关于http://camel.apache.org/file2.html的文档
请阅读各节:
发布于 2017-11-19 20:38:53
HazelcastIdempotentRepository是在集群环境下实现共享文件系统的最佳方法之一。
骆驼路线:
<from uri="file:///var/opt/irs/message?delete=true&readLock=idempotent&idempotentRepository=#idempotentRepo&readLockLoggingLevel=WARN&shuffle=true&delay=5000" />
<to uri="send.file" />根据需求,在骆驼路线上配置readLockRemoveOnCommit=true和readLockRemoveOnRollback=true。
对文件进行随机排序,以减少多个节点试图访问同一文件的可能性。
IdempotentRepository Bean:
此bean定义了一个基于hazelcast的Camel幂等存储库,它确保在多个服务器上运行相同的输入点时,仅由一个文件端点收集文件。
@Autowired
@Qualifier("hazelcastRepo")
private HazelcastInstance hazelcastInstance;
@Bean(name = "idempotentRepo")
public IdempotentRepository<String> myIdempotentRepo() {
return new HazelcastIdempotentRepository(hazelcastInstance, "hazelMap");
}驱逐策略:
为了清理黑兹尔卡斯特,我建议驱逐策略。它也有很多其他的选择来清理仓库。在我的例子中,下面的hazelcast配置工作得很好。在hazelcast-context.xml或hazelcast-default.xml中配置时间到实时秒=x秒。
<map name="hazelMap"
time-to-live-seconds="60"
max-idle-seconds="0"
eviction-policy="LRU"
eviction-percentage="0"
max-size="0"
min-eviction-check-millis="100"/>为了获得更多的信息,我想重新推荐“骆驼在行动中:我的行为文档:幂性”
https://stackoverflow.com/questions/44026925
复制相似问题