【问题标题】:Mule SFTP endpoint fails to open local fileMule SFTP 端点无法打开本地文件
【发布时间】:2014-06-11 08:28:55
【问题描述】:

我有一个 Mule 流,它通过通用入站端点从 ftp 服务器读取文件,对数据进行一些修改,然后通过通用出站端点将文件写入 sftp 服务器。昨天它处理了 60 个文件。在 57 上没有错误,但在三个上出现了以下痕迹。欢迎提出任何建议。

Error writing data over SFTP service, error was: Failed to open local file
4: Failed to open local file
    at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2297)
    at com.jcraft.jsch.ChannelSftp._put(ChannelSftp.java:484)
    at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:438)
    at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:405)
    at org.mule.transport.sftp.SftpClient.storeFile(SftpClient.java:385)
    at org.mule.transport.sftp.SftpMessageDispatcher.doDispatch(SftpMessageDispatcher.java:176)
    at org.mule.transport.AbstractMessageDispatcher.process(AbstractMessageDispatcher.java:100)
    at org.mule.transport.AbstractConnector$DispatcherMessageProcessor.process(AbstractConnector.java:2553)
    at org.mule.processor.AbstractInterceptingMessageProcessorBase.processNext(AbstractInterceptingMessageProcessorBase.java:105)
    at org.mule.interceptor.AbstractEnvelopeInterceptor.process(AbstractEnvelopeInterceptor.java:55)
    at org.mule.processor.AsyncInterceptingMessageProcessor.processNextTimed(AsyncInterceptingMessageProcessor.java:111)
    at org.mule.processor.AsyncInterceptingMessageProcessor$AsyncMessageProcessorWorker.doRun(AsyncInterceptingMessageProcessor.java:158)
    at org.mule.work.AbstractMuleEventWork.run(AbstractMuleEventWork.java:43)
    at org.mule.work.WorkerContext.run(WorkerContext.java:310)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:619)
[ERROR] DispatchingLogger [Services].xmlSftpConnector.dispatcher.29 2014-06-09 15:55:07 Unexpected exception attempting to write file, message was: Failed to open local file
java.io.IOException: Failed to open local file
    at org.mule.transport.sftp.SftpClient.storeFile(SftpClient.java:390)
    at org.mule.transport.sftp.SftpMessageDispatcher.doDispatch(SftpMessageDispatcher.java:176)
    at org.mule.transport.AbstractMessageDispatcher.process(AbstractMessageDispatcher.java:100)
    at org.mule.transport.AbstractConnector$DispatcherMessageProcessor.process(AbstractConnector.java:2553)
    at org.mule.processor.AbstractInterceptingMessageProcessorBase.processNext(AbstractInterceptingMessageProcessorBase.java:105)
    at org.mule.interceptor.AbstractEnvelopeInterceptor.process(AbstractEnvelopeInterceptor.java:55)
    at org.mule.processor.AsyncInterceptingMessageProcessor.processNextTimed(AsyncInterceptingMessageProcessor.java:111)
    at org.mule.processor.AsyncInterceptingMessageProcessor$AsyncMessageProcessorWorker.doRun(AsyncInterceptingMessageProcessor.java:158)
    at org.mule.work.AbstractMuleEventWork.run(AbstractMuleEventWork.java:43)
    at org.mule.work.WorkerContext.run(WorkerContext.java:310)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:619)
[WARN] SftpUtil [Services].xmlSftpConnector.dispatcher.29 2014-06-09 15:55:07 Class java.io.ByteArrayInputStream did not implement the 'ErrorOccurred' decorator, errorOccured=true could not be set.
[ERROR] DispatchingLogger [Services].xmlSftpConnector.dispatcher.29 2014-06-09 15:55:07 
********************************************************************************
Message               : Failed to route event via endpoint: DefaultOutboundEndpoint{endpointUri=sftp://user:<password>@server.com/folder/test/upload, connector=SftpConnector
{
  name=xmlSftpConnector
  lifecycle=start
  this=cfc9fac
  numberOfConcurrentTransactedReceivers=4
  createMultipleTransactedReceivers=true
  connected=true
  supportedProtocols=[sftp]
  serviceOverrides=<none>
}
,  name='endpoint.sftp.server.com.22.folder.test.upload', mep=ONE_WAY, properties={outputPattern=#[function:datestamp:dd-MM-yy]_#[function:systime].xml}, transactionConfig=Transaction{factory=null, action=INDIFFERENT, timeout=0}, deleteUnacceptedMessages=false, initialState=started, responseTimeout=10000, endpointEncoding=UTF-8, disableTransportTransformer=false}. Message payload is of type: String
Code                  : MULE_ERROR-42999
--------------------------------------------------------------------------------
Exception stack is:
1. Failed to open local file (java.io.IOException)
  org.mule.transport.sftp.SftpClient:390 (null)
2. Failed to route event via endpoint: DefaultOutboundEndpoint{endpointUri=sftp://user:<password>@server.com/folder/test/upload, connector=SftpConnector
{
  name=xmlSftpConnector
  lifecycle=start
  this=cfc9fac
  numberOfConcurrentTransactedReceivers=4
  createMultipleTransactedReceivers=true
  connected=true
  supportedProtocols=[sftp]
  serviceOverrides=<none>
}
,  name='endpoint.sftp.server.com.22.folder.test.upload', mep=ONE_WAY, properties={outputPattern=#[function:datestamp:dd-MM-yy]_#[function:systime].xml}, transactionConfig=Transaction{factory=null, action=INDIFFERENT, timeout=0}, deleteUnacceptedMessages=false, initialState=started, responseTimeout=10000, endpointEncoding=UTF-8, disableTransportTransformer=false}. Message payload is of type: String (org.mule.api.transport.DispatchException)
  org.mule.transport.AbstractMessageDispatcher:109 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transport/DispatchException.html)
--------------------------------------------------------------------------------
Root Exception stack trace:
java.io.IOException: Failed to open local file
    at org.mule.transport.sftp.SftpClient.storeFile(SftpClient.java:390)
    at org.mule.transport.sftp.SftpMessageDispatcher.doDispatch(SftpMessageDispatcher.java:176)
    at org.mule.transport.AbstractMessageDispatcher.process(AbstractMessageDispatcher.java:100)
    + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************

【问题讨论】:

  • 失败的文件名是什么?
  • @TracySnell:我不能透露姓名。但是,所有文件都以相同的名称再次成功处理。
  • (失败的)文件有多大?您的本地(临时)文件系统似乎有问题 - 可用空间不足吗?
  • @AndersR.Bystrup 所有文件都在7k左右,可用空间不是问题。

标签: java mule sftp


【解决方案1】:

看起来像是 3 个原因之一:

  1. 您正在写入的文件夹的权限。
  2. 文件路径(或名称)上的空格。
  3. 文件路径中有错误的斜杠

编辑基于评论。

您可以尝试配置maxThreadsActive 以限制一次活动的线程数。

<dispatcher-threading-profile maxThreadsActive="5" maxThreadsIdle="5"/>

【讨论】:

  • 感谢您的回答,但这并不能解释为什么当我重试同名的同一个文件时,我没有遇到任何失败。我认为原因可能与负载有关。事实上,我在单独发送文件时从来没有失败过,只有当我发送一批大约 30 个时,我才开始遇到麻烦。问题是我没有任何基于堆栈跟踪的线索。
  • 我昨天做了这个修改,到现在这个错误还没有再次出现。所以我想这可能是一个最终的解决方案。我会等几天看看错误是否返回,或者有人有更好的解释。否则赏金就是你的了。
  • 但是,您知道为什么负载会导致此特定错误吗?
  • 我不确定线程​​不可用会导致此类错误的确切原因
  • 我不认为这是线程不可用,而是许多线程同时写入此 sftp 服务器的事实导致了错误。为了消除错误,我不得不将活动线程减少到 1。
猜你喜欢
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-28
  • 2013-12-05
  • 1970-01-01
  • 2018-01-03
  • 1970-01-01
相关资源
最近更新 更多