2017-05-17 30 views
2

我需要在集羣環境中完全實現idempotentRepository。 我目前的實現如下,它是爲實現idempotentRepository引起:java.lang.IllegalArgumentException:在使用readLock = idempotent時必須配置IdempotentRepository

<route id="request" > 
       <from uri="file:someFolderLocation?readLock=idempotent&amp;readLockRemoveOnCommit=true"/> 
       <to uri="file: someOtherFolderLocation "/> 

我使用駱駝在集羣環境中拋出錯誤,並希望使用 readlock我的文件消費者端點。唯一的羣集安全的readlock 是冪等性的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 

請指點。

回答

0

有關於那裏提供http://camel.apache.org/file2.html

請仔細閱讀部分文檔:

  • 使用基於文件冪等資料庫(可能不會在大多數集羣的工作,因爲它需要像NFS一些共享的文件系統/ gluster)
  • 使用JPA基於冪庫(可滿足您的要求)
+0

感謝您的幫助! –

1

如果你甲肝e共享文件系統,您可以使用FileIdempotentRepository,希望它適合您。

readLockRemoveOnCommit = true - 此選項允許指定在處理文件成功併發生提交時是否從冪等存儲庫中刪除文件名條目。

readLockRemoveOnRollback = true - 此選項允許指定在處理文件失敗併發生回滾時是否從冪等存儲庫中刪除文件名條目。

以下是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&amp;idempotentRepository=#myFileStore&amp;readLockRemoveOnCommit=true&amp;readLockRemoveOnRollback=true/> 
       <to uri="file: someOtherFolderLocation "/> 
      </route> 
     </camelContext> 
0

HazelcastIdempotentRepository是實現在集羣環境中共享文件系統的最佳途徑之一。

駱駝路線:

<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" /> 

w.r.t的要求,配置 readLockRemoveOnCommit =真和readLockRemoveOnRollback =在駱駝路線真。

通過隨機排序文件以減少多個節點嘗試訪問同一文件的機會。

IdempotentRepository豆:

這個bean定義了基於hazelcast,這確保了文件被當同一inputendpoint超過一臺服務器上只運行一個文件端點收集駱駝冪等倉庫。

 @Autowired 
    @Qualifier("hazelcastRepo") 
    private HazelcastInstance hazelcastInstance; 


     @Bean(name = "idempotentRepo") 
     public IdempotentRepository<String> myIdempotentRepo() { 

      return new HazelcastIdempotentRepository(hazelcastInstance, "hazelMap"); 
     } 

驅逐策略:

清潔hazelcast,我會建議驅逐策略。它還有許多其他選項來清理Repository。在我的情況下,下面的hazelcast配置工作得很好。 在hazelcast-context.xml或hazelcast-default.xml中配置time-to-live-seconds = 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"/> 

爲了獲得更多的信息,我想推薦駱駝在行動:冪等文件:Idempotency

相關問題