首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.lang.IllegalArgumentException: IdempotentRepository必须在使用readLock=idempotent时进行配置

java.lang.IllegalArgumentException: IdempotentRepository必须在使用readLock=idempotent时进行配置
EN

Stack Overflow用户
提问于 2017-05-17 13:55:01
回答 3查看 1.4K关注 0票数 2

I需要在集群环境中完全实现idempotentRepository。

代码语言:javascript
复制
<route id="request" >
                <from uri="file:someFolderLocation?readLock=idempotent&amp;readLockRemoveOnCommit=true"/>
               <to uri="file: someOtherFolderLocation "/>

我在集群环境上使用camel,并且希望在我的文件使用者端点上使用readlock。唯一的集群安全重新锁定是幂等式重新锁,但是这需要在文件uri上设置一个idempotentRepository。

代码语言:javascript
复制
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

请指点。

EN

回答 3

Stack Overflow用户

发布于 2017-05-18 04:53:59

如果您有共享的文件系统,您可以使用FileIdempotentRepository,希望它对您有用。

readLockRemoveOnCommit=true -此选项允许指定在处理文件成功并发生提交时是否从幂等存储库中删除文件名条目。

readLockRemoveOnRollback=true -This选项允许指定是否在处理文件失败并发生回滚时从幂等存储库中删除文件名条目。

以下是FileIdempotentRepository的实现

代码语言:javascript
复制
<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&amp;idempotentRepository=#myFileStore&amp;readLockRemoveOnCommit=true&amp;readLockRemoveOnRollback=true/>
                <to uri="file: someOtherFolderLocation "/>
           </route>
         </camelContext>
票数 1
EN

Stack Overflow用户

发布于 2017-05-17 15:32:11

这里有一些关于http://camel.apache.org/file2.html的文档

请阅读各节:

  • 使用基于文件的幂等存储库(可能无法在大多数集群中工作,因为它需要一些共享文件系统,如nfs/gluster)
  • 使用基于JPA的幂等存储库(可以满足您的需求)
票数 0
EN

Stack Overflow用户

发布于 2017-11-19 20:38:53

HazelcastIdempotentRepository是在集群环境下实现共享文件系统的最佳方法之一。

骆驼路线:

代码语言:javascript
复制
<from uri="file:///var/opt/irs/message?delete=true&amp;readLock=idempotent&amp;idempotentRepository=#idempotentRepo&amp;readLockLoggingLevel=WARN&amp;shuffle=true&amp;delay=5000" />
<to uri="send.file" />

根据需求,在骆驼路线上配置readLockRemoveOnCommit=true和readLockRemoveOnRollback=true。

对文件进行随机排序,以减少多个节点试图访问同一文件的可能性。

IdempotentRepository Bean:

此bean定义了一个基于hazelcast的Camel幂等存储库,它确保在多个服务器上运行相同的输入点时,仅由一个文件端点收集文件。

代码语言:javascript
复制
     @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秒。

代码语言:javascript
复制
<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"/>

为了获得更多的信息,我想重新推荐“骆驼在行动中:我的行为文档:幂性

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44026925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档