You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mule 4.4使用SMB Connector遇Connection reset by peer问题求助

问题:Mule 4.4 SMB Connector 3.1.1 持续出现Connection reset by peer错误且无法重连

基于Unix容器部署的Mule 4.4本地应用,需创建文件夹并生成文件,使用SMB Connector 3.1.1。初期少量请求正常,5-10分钟后持续抛出Connection reset by peer错误,首次报错后无法重连。

代码示例

<smb:config name="SMB_Connector_Config" doc:name="SMB Connector Config" doc:id="4cb53c1c-edbe-4068-8694-6ed860730b1d" >
    <smb:connection host="xx.xx.xxx.xx" share="TCS" username="mule" password="****" fileAgeUnit="MINUTES" fileAge="60" socketTimeout="10" socketTimeoutUnit="MINUTES" domain="******.NET"/>
 </smb:config>

<flow name="test-smbFlow" doc:id="657bcb88-1dea-4e67-8390-9567fdfc5c5b" >
        <http:listener doc:name="Listener" doc:id="8db8d8e0-9cfb-4d5b-afcf-4bcce6d67fc5" config-ref="HTTP_Listener_config" path="test2"/>
        <ee:transform doc:name="Transform Message" doc:id="a1e88ffe-3d64-4093-97ac-c1bb81040790" >
            <ee:message >
            </ee:message>
            <ee:variables >
                <ee:set-variable variableName="cachedResponse" ><![CDATA[%dw 2.0
output application/json
---
{
    'message' : "xyz"
}]]></ee:set-variable>
                <ee:set-variable variableName="fileName" ><![CDATA[output application/java
---
"$(correlationId).json"]]></ee:set-variable>
                <ee:set-variable variableName="folderName" ><![CDATA[%dw 2.0
output application/java
---
correlationId]]></ee:set-variable>
            </ee:variables>
        </ee:transform>
<flow-ref doc:name="test-smbSub_Flow" doc:id="8908444f-6d76-4df6-beff-f03e604e69ea" name="test-smbSub_Flow"/>
        <logger level="INFO" doc:name="Logger" doc:id="00c0343c-21cc-4af1-8427-2542f0415f0a" />
    </flow>
    <flow name="test-smbSub_Flow" doc:id="bfe3935a-e4ed-44be-b4c5-f148821c395c" >
        <smb:directory-create doc:name="Directory Create" doc:id="cf111d1a-41f3-4e48-8461-e5f6b1f47849" config-ref="SMB_Connector_Config" dirName="#['\Input\Folder' ++ '\\' ++ vars.folderName]">
            <reconnect-forever />

        </smb:directory-create>
        <smb:file-write doc:name="File Write" doc:id="9d654a52-6006-4aae-a21c-de731799ea51" config-ref="SMB_Connector_Config" fileName="#[vars.fileName]" dirName="#['\Input\Folder' ++ '\\' ++ correlationId]">
            <reconnect-forever frequency="6000" blocking="false" />
            <smb:file-content><![CDATA[#[vars.cachedResponse]]]></smb:file-content>
        </smb:file-write>
    </flow>

报错信息

Message               : com.hierynomus.protocol.transport.TransportException: java.net.SocketException: Connection reset by peer: socket write error
Element               : test-smbSub_Flow/processors/0 @ test-smb:test-smb.xml:45 (Directory Create)

已尝试措施

  • 更换Connector旧版本
  • 切换不同Mule运行时
  • 查阅Mule4 SMB Connector官方文档
  • 无法从共享服务器团队获得有效支持
  • 项目从Mule3迁移而来,原Mule3环境下共享服务可正常使用

解决方案

1. 调整连接池与超时配置

SMB服务器通常会主动断开长时间闲置的连接,需修改客户端配置主动回收闲置连接:

  • 降低socketTimeout至1分钟,配合maxIdleTime设置闲置连接回收时间
  • 配置示例:
<smb:config name="SMB_Connector_Config" doc:name="SMB Connector Config">
    <smb:connection host="xx.xx.xxx.xx" share="TCS" username="mule" password="****" 
        fileAgeUnit="MINUTES" fileAge="60" socketTimeout="1" socketTimeoutUnit="MINUTES" 
        domain="******.NET" 
        maxConnections="10" maxIdleTime="300000" maxIdleTimeUnit="MILLISECONDS"/>
</smb:config>

2. 优化重连策略与连接验证

当前操作节点的重连配置未覆盖连接池层面的死连接问题,需补充全局配置:

  • 在连接节点内添加重连与连接验证规则,确保每次使用前检查连接有效性
  • 配置示例:
<smb:config name="SMB_Connector_Config" doc:name="SMB Connector Config">
    <smb:connection host="xx.xx.xxx.xx" share="TCS" username="mule" password="****" 
        fileAgeUnit="MINUTES" fileAge="60" socketTimeout="1" socketTimeoutUnit="MINUTES" 
        domain="******.NET">
        <reconnect frequency="5000" count="3"/>
        <validation validateConnections="true" />
    </smb:connection>
</smb:config>

3. 显式关闭连接

在子流操作完成后主动断开连接,避免复用被服务器断开的死连接:

<flow name="test-smbSub_Flow" doc:id="bfe3935a-e4ed-44be-b4c5-f148821c395c" >
    <smb:directory-create ...>
        <reconnect-forever />
    </smb:directory-create>
    <smb:file-write ...>
        <reconnect-forever frequency="6000" blocking="false" />
    </smb:file-write>
    <smb:disconnect config-ref="SMB_Connector_Config" doc:name="Disconnect"/>
</flow>

替代方案

1. 直接使用JCIFS-NG Java库

绕过Mule SMB Connector,通过Java组件调用JCIFS-NG实现SMB操作,示例代码:

import jcifs.CIFSContext;
import jcifs.config.PropertyConfiguration;
import jcifs.context.BaseContext;
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileOutputStream;

public class SmbOperations {
    public static void createDirAndWriteFile(String host, String share, String domain, String username, String password, String folderPath, String fileName, String content) throws Exception {
        // 配置SMB上下文
        PropertyConfiguration config = new PropertyConfiguration();
        config.setProperty("jcifs.smb.client.domain", domain);
        config.setProperty("jcifs.smb.client.username", username);
        config.setProperty("jcifs.smb.client.password", password);
        CIFSContext context = new BaseContext(config);

        // 创建目录
        String smbFolderUrl = String.format("smb://%s/%s/%s", host, share, folderPath.replace("\\", "/"));
        SmbFile folder = new SmbFile(smbFolderUrl, context);
        if (!folder.exists()) {
            folder.mkdirs();
        }

        // 写入文件
        String smbFileUrl = smbFolderUrl + "/" + fileName;
        try (SmbFileOutputStream out = new SmbFileOutputStream(new SmbFile(smbFileUrl, context))) {
            out.write(content.getBytes());
        }
    }
}

在Mule中通过<java:invoke>调用该方法,需在pom.xml添加依赖:

<dependency>
    <groupId>org.codelibs</groupId>
    <artifactId>jcifs-ng</artifactId>
    <version>2.1.32</version>
</dependency>

2. 切换至FTP/SFTP协议

若共享服务器支持FTP或SFTP,替换为Mule的FTP/SFTP Connector,避免SMB协议的兼容性问题,配置更简单且稳定性更高。


关键排查点

  • 检查Unix容器的防火墙/网络策略,是否存在自动断开闲置连接的规则
  • 确认SMB服务器的会话超时设置,是否短于客户端的socketTimeout
  • 启用Connector的DEBUG日志,查看连接建立、闲置、断开的详细过程

内容的提问来源于stack exchange,提问作者Infinity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 13:34:51