2016-09-28 17 views
0

私は、再試行メカニズムを使用してSFTPサーバー上にファイルをアップロードするためにSpring SFTPアウトバウンドチャネルアダプタを使用しています。アップロードでエラーが発生した場合は、メールを送信し、特定の回数の再試行後にファイルをエラーフォルダに移動しています。Spring統合:failureChannelの問題

以下は私の設定です。

<file:inbound-channel-adapter id="csvFileChannel" 
    directory="${csv.base.directory}" filename-regex="^(.*).csv" 
    comparator="lastModifiedComparator" prevent-duplicates="true"> 
    <int:poller fixed-rate="5000" /> 
</file:inbound-channel-adapter> 

<bean id="lastModifiedComparator" 
    class="org.apache.commons.io.comparator.LastModifiedFileComparator" /> 
<bean id="sftpSessionFactory" 
    class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory" 
    lazy-init="true"> 
    <property name="host" value="${sftp.host}" /> 
    <property name="port" value="${sftp.port}" /> 
    <property name="user" value="${sftp.user}" /> 
    <property name="password" value="${sftp.password}" /> 
</bean> 

<int-sftp:outbound-channel-adapter 
    id="sftpOutboundAdapter" session-factory="sftpSessionFactory" channel="csvFileChannel" 
    remote-file-separator="/" remote-filename-generator-expression="payload.getName()" 
    remote-directory="/" mode="REPLACE"> 
    <int-sftp:request-handler-advice-chain> 
     <bean 
      class="org.springframework.integration.handler.advice.ExpressionEvaluatingRequestHandlerAdvice"> 
      <property name="onSuccessExpression" 
       value="payload.renameTo(new java.io.File('${csv.archive.directory}' , payload.name))" /> 
      <property name="successChannel" ref="nullChannel" /> 
      <property name="onFailureExpression" 
       value="payload.renameTo(new java.io.File('${csv.error.directory}' , payload.name))" /> 
      <property name="failureChannel" ref="failChannel" /> 
      <property name="trapException" value="true" /> 
     </bean> 
     <ref bean="retryAdvice" /> 
    </int-sftp:request-handler-advice-chain> 
</int-sftp:outbound-channel-adapter> 

<int:handler-retry-advice id="retryAdvice" 
    max-attempts="5"> 
    <int:fixed-back-off interval="5000" /> 
</int:handler-retry-advice> 

<int:channel id="failChannel" /> 

<int:chain input-channel="failChannel" output-channel="mailMessageChannel"> 
    <int:transformer 
     expression="'SFTP Upload failed for the file: ' + payload.failedMessage.payload.name " /> 
</int:chain> 
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> 
    <property name="host" value="${smtp.host}" /> 
    <property name="port" value="${smtp.port}" /> 
    <property name="username" value="${smtp.userName}" /> 
    <property name="password" value="${smtp.password}" /> 
    <property name="javaMailProperties"> 
     <props> 
      <prop key="mail.smtp.auth">true</prop> 
     </props> 
    </property> 
</bean> 

<int:channel id="mailMessageChannel" /> 
<int:chain input-channel="mailMessageChannel"> 
    <int-mail:header-enricher> 
     <int-mail:to value="${fail.email.to}" /> 
     <int-mail:cc value="${fail.email.to}" /> 
     <int-mail:from value="${fail.email.to}" /> 
     <int-mail:subject value="SFTP Upload failed" /> 
    </int-mail:header-enricher> 
    <int-mail:outbound-channel-adapter 
     mail-sender="mailSender" /> 
</int:chain> 

私が直面している問題は、各ファイルに対して2つの電子メールが届いていることです。問題を把握することはできません。 spring-integration.logs

+0

'org.springframework.integration'カテゴリの' DEBUG'ログを共有してください。 'retryAdvice'なしでどれくらいのメールを受信しますか? –

+0

@ArtemBilan:スプリング統合ログのリンクを提供しました。 'retryAdvice'なしで試してみると2つのメールが届きました、 – Vinod

答えて

1

あなたのログによると、我々はソースディレクトリから2つのファイルを持っている:ここで

は、ばね統合ログで

それらの両方で終了するので、あなたに少し混乱たぶん
2016-09-28 22:14:34,595 [DEBUG] [org.springframework.integration.file.FileReadingMessageSource] Added to queue: [D:\CSVFiles\MyCustomerTarget_20160928221429.csv, D:\CSVFiles\MyOrderTarget_20160928221429.csv] 

同じ接尾辞?

これらのファイルは両方ともFTPに転送できませんでした。したがって、エラーに関する2つの電子メールがあります。各ファイルに1つ。

ログに応じてメールを送信する必要はありません。

いいえ、ファイルごとに2つのメールがあります。したがって、2つのファイルがあるので、合計4つのメールで。

もう一度設定をもう一度見てみましょう。

<int-mail:to value="${fail.email.to}" /> 
<int-mail:cc value="${fail.email.to}" /> 
のGmailを経由して私に2つのコピーを送信しません

が、それは他のメールサーバが同じ受信者には、2つの電子メールのようにそれを通過しないという意味ではありません。

+0

いいえ、各ファイルに2つのメールがあります。したがって、2つのファイルがあるので、合計4つのメールで。 – Vinod

+0

ありがとう、それは問題でした。私はtoとccのために同じ電子メールIDを使用していました。 – Vinod

関連する問題