2017-02-02 6 views
0

будет ли кто-нибудь любезно предоставлен внутри и руководство по решению следующей проблемы FileConnector.copy? Я использую wso2esb версии 4.9 и FileConnector2.WSO2 ESB FileConnector2.copy копирует файлы в пункт назначения 200+ раз

У меня есть последовательность, которая использует операцию копирования FileConnector2 COPY для копирования файла в место FTP. Операция COPY копирует файл в пункт назначения несколько раз, даже если нет проблемы параллелизма, о которой я знаю! Интересно, что количество копий файла в зависимости от среды, в которой он работает. В среде dev файл был скопирован 17 раз. При создании файла файл копировался 200 раз. Я пытаюсь понять, что это такое. Я неправильно настроил операцию копирования файла FileConnector? Я дал определение последовательности и сетевой трафик ниже. Большое вам спасибо за вашу помощь заранее.

Определение последовательности, которое копирует файл.

<?xml version="1.0" encoding="UTF-8"?> 
<sequence name="SendFile2VendorSeq" onError="FileUploadFailSeq" 
trace="disable" xmlns="http://ws.apache.org/ns/synapse"> 
<property action="remove" name="ClientApiNonBlocking" scope="axis2"/> 
<property name="OUT_ONLY" scope="default" type="STRING" value="true"/> 
<dblookup description="Get CDR files to be upload"> 
    <connection> 
    <pool> 
     <dsName>jdbc/DB_DS</dsName> 
    </pool> 
    </connection> 
    <statement> 
    <sql><![CDATA[ 
     SELECT QUERY HERE 
    ]]></sql> 
    <parameter expression="get-property('vendorCode')" type="VARCHAR"/> 
    <result column="vendor_dest" name="vendorDest"/> 
    <result column="file_name" name="fileName"/> 
    <result column="vendor_id" name="vendorId"/> 
    <result column="file_path" name="fileSource"/> 
    <result column="vendor_code" name="vendorCode"/> 
    <result column="id" name="fileId"/> 
    </statement> 
</dblookup> 
<!-- CHECK TO SEE IF A ROW IS RETURNED. IF NOT THEN EXIT --> 
<filter xpath="boolean(get-property('fileSource'))"> 
    <then> 
    <property 
     expression="fn:concat(get-property('fileSource'),get-property('fileName'))" 
     name="sourceFile" scope="default" type="STRING"/> 
    <fileconnector.isFileExist> 
     <source>{$ctx:sourceFile}</source> 
    </fileconnector.isFileExist> 
    <switch source="//fileExist"> 
     <case regex="true"> 
     <log description="logEntry" level="full"/> 
     <!-- Log the transaction in Database --> 
     <log description="LogEntry" level="custom"> 
      <property 
      expression="fn:concat('Uploading ', get-property('fileName'), ' (id:', get-property('fileId'), ') to vendor ', get-property('vendorCode'))" name="message"/> 
     </log> 
     <dblookup description="LogTX"> 
      <connection> 
      <pool> 
       <dsName>jdbc/DB_DS</dsName> 
      </pool> 
      </connection> 
      <statement> 
      <sql><![CDATA[SELECT record_TX(?,?)]]></sql> 
      <parameter expression="get-property('fileId')" type="INTEGER"/> 
      <parameter expression="get-property('vendorId')" type="INTEGER"/> 
      </statement> 
     </dblookup> 
     <!-- Conduct file copy --> 
     <fileconnector.copy> 
      <source>{$ctx:fileSource}</source> 
      <destination>{$ctx:vendorDest}</destination> 
      <filePattern>{$ctx:fileName}</filePattern> 
     </fileconnector.copy> 
     <!-- Update the transaction with status --> 
     <dblookup description="LogTX"> 
      <connection> 
      <pool> 
       <dsName>jdbc/DB_DS</dsName> 
      </pool> 
      </connection> 
      <statement> 
      <sql><![CDATA[SELECT record_TX(?,?,?,?)]]></sql> 
      <parameter expression="get-property('fileId')" type="INTEGER"/> 
      <parameter expression="get-property('vendorId')" type="INTEGER"/> 
      <parameter type="CHAR" value="S"/> 
      <parameter type="VARCHAR" value="Success"/> 
      </statement> 
     </dblookup> 
     <log description="LogEntry" level="custom"> 
      <property 
      expression="fn:concat('Successfully uploaded ', get-property('fileName'), ' (id:', get-property('fileId'), ') to vendor ', get-property('vendorCode'))" name="message"/> 
     </log> 
     <drop/> 
     </case> 
     <default> 
     <log description="LogEntry" level="custom"> 
      <property 
      expression="fn:concat(get-property('fileName'), ' (id:', get-property('fileId'), ') does not exists in the source directory.')" name="message"/> 
     </log> 
     <dblookup description="LogTX"> 
      <connection> 
      <pool> 
       <dsName>jdbc/DB_DS</dsName> 
      </pool> 
      </connection> 
      <statement> 
      <sql><![CDATA[SELECT record_TX(?,?,?,?)]]></sql> 
      <parameter expression="get-property('fileId')" type="INTEGER"/> 
      <parameter expression="get-property('vendorId')" type="INTEGER"/> 
      <parameter type="CHAR" value="S"/> 
      <parameter type="VARCHAR" value="File does not exists in the source directory."/> 
      </statement> 
     </dblookup> 
     </default> 
    </switch> 
    </then> 
    <else> 
    <drop/> 
    </else> 
</filter> 
</sequence> 

Образец сетевого вывода показывает поведение.

Mon Jan 30 11:46:00 2017 [pid 21385] CONNECT: Client "Some-IP-address" 
Mon Jan 30 11:46:00 2017 [pid 21384] [userName] OK LOGIN: Client "Some-IP-address" 
Mon Jan 30 11:46:00 2017 [pid 21386] [userName] OK UPLOAD: Client "Some-IP-address", "/test/file.T70130IN03.csv", 1607 bytes, 66.90Kbyte/sec 
Mon Jan 30 11:46:00 2017 [pid 21388] CONNECT: Client "Some-IP-address" 
Mon Jan 30 11:46:00 2017 [pid 21387] [userName] OK LOGIN: Client "Some-IP-address" 
Mon Jan 30 11:46:00 2017 [pid 21389] [userName] OK UPLOAD: Client "Some-IP-address", "/test/file.T70130IN03.csv", 1607 bytes, 67.74Kbyte/sec 
Mon Jan 30 11:46:00 2017 [pid 21392] CONNECT: Client "Some-IP-address" 
Mon Jan 30 11:46:01 2017 [pid 21391] [userName] OK LOGIN: Client "Some-IP-address" 
Mon Jan 30 11:46:01 2017 [pid 21393] [userName] OK UPLOAD: Client "Some-IP-address", "/test/file.T70130IN03.csv", 1607 bytes, 31.43Kbyte/sec 
Mon Jan 30 11:46:01 2017 [pid 21395] CONNECT: Client "Some-IP-address" 
Mon Jan 30 11:46:01 2017 [pid 21394] [userName] OK LOGIN: Client "Some-IP-address" 
Mon Jan 30 11:46:01 2017 [pid 21396] [userName] OK UPLOAD: Client "Some-IP-address", "/test/file.T70130IN03.csv", 1607 bytes, 64.64Kbyte/sec 
Mon Jan 30 11:46:01 2017 [pid 21398] CONNECT: Client "Some-IP-address" 
Mon Jan 30 11:46:01 2017 [pid 21397] [userName] OK LOGIN: Client "Some-IP-address" 
Mon Jan 30 11:46:02 2017 [pid 21399] [userName] OK UPLOAD: Client "Some-IP-address", "/test/file.T70130IN03.csv", 1607 bytes, 64.84Kbyte/sec 
Mon Jan 30 11:46:02 2017 [pid 21401] CONNECT: Client "Some-IP-address" 
Mon Jan 30 11:46:02 2017 [pid 21400] [userName] OK LOGIN: Client "Some-IP-address" 
Mon Jan 30 11:46:02 2017 [pid 21402] [userName] OK UPLOAD: Client "Some-IP-address", "/test/file.T70130IN03.csv", 1607 bytes, 47.52Kbyte/sec 
Mon Jan 30 11:46:02 2017 [pid 21404] CONNECT: Client "Some-IP-address" 
Mon Jan 30 11:46:02 2017 [pid 21403] [userName] OK LOGIN: Client "Some-IP-address" 
Mon Jan 30 11:46:02 2017 [pid 21405] [userName] OK UPLOAD: Client "Some-IP-address", "/test/file.T70130IN03.csv", 1607 bytes, 58.88Kbyte/sec 
Mon Jan 30 11:46:02 2017 [pid 21407] CONNECT: Client "Some-IP-address" 
Mon Jan 30 11:46:03 2017 [pid 21406] [userName] OK LOGIN: Client "Some-IP-address" 
Mon Jan 30 11:46:03 2017 [pid 21408] [userName] OK UPLOAD: Client "Some-IP-address", "/test/file.T70130IN03.csv", 1607 bytes, 52.50Kbyte/sec 
Mon Jan 30 11:46:03 2017 [pid 21410] CONNECT: Client "Some-IP-address" 
Mon Jan 30 11:46:03 2017 [pid 21409] [userName] OK LOGIN: Client "Some-IP-address" 
Mon Jan 30 11:46:03 2017 [pid 21411] [userName] OK UPLOAD: Client "Some-IP-address", "/test/file.T70130IN03.csv", 1607 bytes, 63.34Kbyte/sec 
Mon Jan 30 11:46:03 2017 [pid 21413] CONNECT: Client "Some-IP-address" 
Mon Jan 30 11:46:03 2017 [pid 21412] [userName] OK LOGIN: Client "Some-IP-address" 
Mon Jan 30 11:46:04 2017 [pid 21414] [userName] OK UPLOAD: Client "Some-IP-address", "/test/file.T70130IN03.csv", 1607 bytes, 69.12Kbyte/sec 
Mon Jan 30 11:46:04 2017 [pid 21416] CONNECT: Client "Some-IP-address" 
Mon Jan 30 11:46:04 2017 [pid 21415] [userName] OK LOGIN: Client "Some-IP-address" 
Mon Jan 30 11:46:04 2017 [pid 21417] [userName] OK UPLOAD: Client "Some-IP-address", "/test/file.T70130IN03.csv", 1607 bytes, 56.66Kbyte/sec 
Mon Jan 30 11:46:04 2017 [pid 21419] CONNECT: Client "Some-IP-address" 
Mon Jan 30 11:46:04 2017 [pid 21418] [userName] OK LOGIN: Client "Some-IP-address" 
Mon Jan 30 11:46:04 2017 [pid 21420] [userName] OK UPLOAD: Client "Some-IP-address", "/test/file.T70130IN03.csv", 1607 bytes, 66.30Kbyte/sec 
Mon Jan 30 11:46:04 2017 [pid 21422] CONNECT: Client "Some-IP-address" 
Mon Jan 30 11:46:04 2017 [pid 21421] [userName] OK LOGIN: Client "Some-IP-address" 
Mon Jan 30 11:46:05 2017 [pid 21423] [userName] OK UPLOAD: Client "Some-IP-address", "/test/file.T70130IN03.csv", 1607 bytes, 68.93Kbyte/sec 

Записи в журнале системного журнала. похоже, что для завершения операции медиатор занимает более 2 минут. В течение этих 2 минут или около того он многократно копирует файл в пункт назначения снова и снова, пока не произойдет какой-то тайм-аут.

[2017-02-02 15:24:58,250] DEBUG - ClassMediator Start : Class mediator 
[2017-02-02 15:24:58,250] DEBUG - ClassMediator invoking : class org.wso2.carbon.connector.FileCopy.mediate() 
[2017-02-02 15:25:46,851] DEBUG - ThreadingView Thread state summary for PassthroughHttpServerWorker threads - Blocked: 0.0%, Unblocked: 100.0% 
[2017-02-02 15:25:46,881] DEBUG - ThreadingView Thread state summary for PassthroughHttpServerWorker threads - Blocked: 0.0%, Unblocked: 100.0% 
[2017-02-02 15:26:46,855] DEBUG - ThreadingView Thread state summary for PassthroughHttpServerWorker threads - Blocked: 0.0%, Unblocked: 100.0% 
[2017-02-02 15:26:46,884] DEBUG - ThreadingView Thread state summary for PassthroughHttpServerWorker threads - Blocked: 0.0%, Unblocked: 100.0% 
[2017-02-02 15:27:29,479] DEBUG - ClassMediator End : Class mediator 
[2017-02-02 15:27:29,479] DEBUG - SequenceMediator End : Sequence <CopyFile> 

ответ

0

Я нашел решение после декомпиляции FileCopy.class из FileConnector. По-видимому, существует цикл FOR в случае, когда filePattern указан в конфигурации медиатора. После того, как я удалил filePattern и задал файл в источнике, он работает так, как ожидалось.

<sequence name="CopyFile" onError="AppDefaultFailSeq" trace="disable" 
xmlns="http://ws.apache.org/ns/synapse"> 
     <fileconnector.copy> 
     <source>c://data/out/testFile.csv</source> 
     <destination>ftp://userName:{password}@ftp.co.com/test</destination> 
     </fileconnector.copy> 
</sequence>