2017-04-17 45 views
2

我想借助MuleRequester移動文件。對於大文件(300MB> x),有時會阻止while流,並且我始終會在下面顯示錯誤消息。Mule請求者 - 無法移動文件

該文件始終由java.exe進程鎖定。

小文件沒有問題。

該文件保留在文件夾「C:\ itm \ main \ datafeeds \ backup」中,並且「C:\ itm \ main \ datafeeds \ process \」爲空。

我不知道如何解決這個問題。

錯誤消息:

Message    : Failed to move file "C:\itm\main\datafeeds\backup\my_file.xml" to "C:\itm\main\datafeeds\process\my_file.xml". The file might already exist. 
 
Payload    : [{numOfRecords=0}] 
 
Payload Type   : java.util.LinkedList 
 
Endpoint    : DefaultInboundEndpoint{endpointUri=file:///C:/itm/main/datafeeds/backup/?autoDelete=true, connector=FileConnector 
 
         { 
 
          name=File 
 
          lifecycle=start 
 
          this=300a38e7 
 
          numberOfConcurrentTransactedReceivers=4 
 
          createMultipleTransactedReceivers=true 
 
          connected=true 
 
          supportedProtocols=[file] 
 
          serviceOverrides=<none> 
 
         } 
 
         , name='endpoint..C.itm.main.datafeeds.backup', mep=ONE_WAY, properties={autoDelete=true}, transactionConfig=Transaction{factory=null, action=INDIFFERENT, timeout=0}, deleteUnacceptedMessages=false, initialState=started, responseTimeout=10000, endpointEncoding=UTF-8, disableTransportTransformer=false} 
 
Timeout    : 1000 
 
Element    : /poller_product_parse_aff_file/processors/0/0/1 @ product_2_parse_aff_file_to_db 
 
-------------------------------------------------------------------------------- 
 
Root Exception stack trace: 
 
org.mule.api.DefaultMuleException: Failed to move file "C:\itm\main\datafeeds\backup\my_file.xml" to "C:\itm\main\datafeeds\process\my_file.xml". The file might already exist. 
 
\t at org.mule.transport.file.FileMessageRequester.moveOrDelete(FileMessageRequester.java:222) 
 
\t at org.mule.transport.file.FileMessageRequester.doRequest(FileMessageRequester.java:188) 
 
\t at org.mule.transport.AbstractMessageRequester.request(AbstractMessageRequester.java:94) 
 
\t at org.mule.transport.AbstractConnector.request(AbstractConnector.java:2259) 
 
\t at org.mule.endpoint.DefaultInboundEndpoint.request(DefaultInboundEndpoint.java:80) 
 
\t at org.mule.client.DefaultLocalMuleClient.request(DefaultLocalMuleClient.java:184) 
 
\t at org.mule.module.MuleRequesterModule.request(MuleRequesterModule.java:64) 
 
...

的騾請求者CFG:

<mulerequester:request resource="${file.RequesterUrl}" timeout="1000" doc:name="Mule Requester" />

環境:

操作系統:Windows服務器2012R2

JRE:V1.7

騾子申請人:V1.5

騾子Anypoint演播室:騾服務器3.8.0 CE

回答

0

工作時對於這樣的大文件,問題大多存在於java的內存中。嘗試增加可用(最大)java堆大小。

0

謝謝你的回答! 我以前有過這樣的堆問題,我猜這不是這種情況下的問題,因爲堆問題會拋出特定的錯誤消息。

我VM參數是:

-Xms2048m 
 
-Xmx4096m 
 
-XX:MaxPermSize=2048m

+0

這不是堆空間錯誤無關! –

0

我覺得你再次複製相同的文件到相同的位置。

org.mule.api.DefaultMuleException: Failed to move file "C:\itm\main\datafeeds\backup\my_file.xml" to "C:\itm\main\datafeeds\process\my_file.xml". The file might already exist. 

你可以發佈你的完整的XML配置,以進一步幫助。

+0

源位置是:備份,目標ist進程 – skornemaster

0

另一種方法是使用文件出站並將有效載荷寫回輸出文件。對於只是移動文件可能有許多其他的選擇,如批處理/外殼腳本等

+0

是的,調用腳本將工作我猜。我必須使用mule請求者,因爲我必須在流中移動它。這裏的騾子解決方案非常差。 – skornemaster

0

謝謝你的幫助!

這裏北京時間整個流程:

<?xml version="1.0" encoding="UTF-8"?> 
 
<mule xmlns:vm="http://www.mulesoft.org/schema/mule/vm" xmlns:mulerequester="http://www.mulesoft.org/schema/mule/mulerequester" xmlns:db="http://www.mulesoft.org/schema/mule/db" xmlns:metadata="http://www.mulesoft.org/schema/mule/metadata" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:wmq="http://www.mulesoft.org/schema/mule/ee/wmq" xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" 
 
\t xmlns:file="http://www.mulesoft.org/schema/mule/file" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" 
 
\t xmlns:spring="http://www.springframework.org/schema/beans" 
 
\t xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 
\t xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd 
 
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd 
 
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd 
 
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd 
 
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd 
 
http://www.mulesoft.org/schema/mule/ee/wmq http://www.mulesoft.org/schema/mule/ee/wmq/current/mule-wmq-ee.xsd 
 
http://www.mulesoft.org/schema/mule/db http://www.mulesoft.org/schema/mule/db/current/mule-db.xsd 
 
http://www.mulesoft.org/schema/mule/mulerequester http://www.mulesoft.org/schema/mule/mulerequester/current/mule-mulerequester.xsd 
 
http://www.mulesoft.org/schema/mule/vm http://www.mulesoft.org/schema/mule/vm/current/mule-vm.xsd"> 
 

 
<file:connector name="File" autoDelete="true" streaming="false" validateConnections="false" doc:name="File" outputAppend="true" moveToDirectory="${file.workingDir}" /> 
 
    <flow name="poller_product_parse_aff_file" processingStrategy="synchronous"> 
 
     <poll doc:name="Poll"> 
 
      <fixed-frequency-scheduler frequency="15" timeUnit="SECONDS"/> 
 
      <db:select config-ref="MYSQL_GENERIC_CFG" doc:name="Database"> 
 
       <db:parameterized-query><![CDATA[SELECT COUNT(*) AS numOfRecords FROM mule_product]]></db:parameterized-query> 
 
      </db:select> 
 
     </poll> 
 
     <choice doc:name="Choice"> 
 
      <when expression="#[payload.get(0).numOfRecords &lt; 1000]"> 
 
       <logger message="#[System.getProperty('line.separator')] ############################ Database is free, so start parsing next xml file ###########################:: #[flowVars.fileRequesterUrl]" level="TRACE" doc:name="Logger"/> 
 
       <mulerequester:request resource="${file.RequesterUrl}" timeout="30000" doc:name="Mule Requester"/> 
 
      
 
       <choice doc:name="Choice"> 
 
        <when expression="#[payload != null &amp;&amp; payload.size()&gt;0]"> 
 
         <logger message="#[System.getProperty('line.separator')] +++ DB is free and file was found" level="TRACE" doc:name="Logger"/> 
 
         <flow-ref name="product_parse_aff_file_to_dbFlow" doc:name="product_parse_aff_file_to_dbFlow"/> 
 
        </when> 
 
        <otherwise> 
 
         <logger message="#[System.getProperty('line.separator')] --- File not found or filesize is zero: #[payload]" level="TRACE" doc:name="Logger"/> 
 
        </otherwise> 
 
       </choice> 
 
      </when> 
 
      <when expression=""> 
 
       <logger message="::::::::::::::: start of parsing the files:no fo records in db :::::&gt;#[payload.get(0).numOfRecords]" level="TRACE" doc:name="Logger"/> 
 
      </when> 
 
      <otherwise> 
 
       <logger message="::::::::::file processing not started as the condition is not met i.e SELECT COUNT(*) AS numOfRecords FROM mule_product &gt;1000" level="TRACE" doc:name="Logger"/> 
 
      </otherwise> 
 
     </choice> 
 
    </flow> 
 
\t .... 
 
</mule>