问题:如何使用mule esb 进行文件传输
应用场景:
局域网内不同服务器之间共享文件夹的形式传入文件,采用mule esb 实现共享文件夹之间文件传递的自动化,example: 服务器一(ip:10.66.88.1)上有个input共享文件夹,服务器二(10.66.88.2)上有个output文件夹,服务器一产生生成文件到input共享文件夹,人工copy到服务器二的output文件夹,服务器二再从output文件夹读取数据,mule esb文件传输,解决服务器一上的文件夹到服务器二output文件夹同步的问题。
上面废话了一大堆,一句话概括:mule esb 文件传输:从一个文件夹把对应文件传输到另外一个文件夹。
关于共享文件夹和FTP传输文件的区别猛戳这里
组件: mule file connector
直接上例子
<?xml version="1.0" encoding="UTF-8"?>
<mule 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"
xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.6.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<!-- Typical Connector for Inbound Endpoint: Read files -->
<file:connector name="input" autoDelete="true" pollingFrequency="1000" doc:name="File" />
<!-- Typical Connector for Outbound Endpoint: Write files -->
<file:connector name="output" outputAppend="false" doc:name="File" />
<flow name="filetestFlow">
<file:inbound-endpoint connector-ref="input"
path="D:\mule\test\input" doc:name="File" responseTimeout="10000" />
<file:outbound-endpoint connector-ref="output"
path="D:\mule\test\output" doc:name="File" responseTimeout="10000" />
</flow>
</mule>
说明一:
<file:connector name="input" autoDelete="true" pollingFrequency="1000" doc:name="File" />
- file:connecctor 采用file的方式进行连接
- name=”input”命名是了后期使用引用
- autoDelete=”true” 读取后自动删除文件
- pollingFrequency=”1000” 轮询频率 1000代表1000毫秒=1秒
<file:connector name="output" outputAppend="false" doc:name="File" />
- outputAppend=”false”导出的文件时是否追加文件还是覆盖 false代表覆盖,true 代表追加
<flow name="filetestFlow">
<file:inbound-endpoint connector-ref="input"
path="D:\mule\test\input" doc:name="File" responseTimeout="10000" />
<file:outbound-endpoint connector-ref="output"
path="D:\mule\test\output" doc:name="File" responseTimeout="10000" />
</flow>
- path是导入的文件路径,如果是局域网内的共享文件夹,就是共享文件夹路径:exampe:path=”\10.66.88.1\input”代表10.66.88.1下面的共享文件夹
- connector-ref=”input”代表引用上面定义的file:connector
- responseTimeout=”10000”不响应或者出错,10秒以后再次扫描
- file:inbound-endpoint 代表文件输入端
- file:outbound-
- endpoint代表文件输出端
如果想对文件夹下有规则的文件名和后缀进行过滤代码如下
如果想对读取的文件进行备份
如果需要文件正在写入时读取不报错
看如下示例代码片段
<file:connector name="input1" autoDelete="false" fileAge="10000" recursive="true" pollingFrequency="1000" workDirectory="D:\mule\test\work" workFileNamePattern="#[message.inboundProperties[‘originalFilename‘]]" />
<file:connector name="output1" outputAppend="false"/>
<flow name="moveFile">
<file:inbound-endpoint connector-ref="input1" path="D:\mule\test\input1"
moveToDirectory="D:\mule\test\backup"
moveToPattern="#[message.inboundProperties[‘originalFilename‘]].backup"
>
<file:filename-wildcard-filter pattern="*.txt,*.xml,*.docx" />
</file:inbound-endpoint>
<file:outbound-endpoint connector-ref="output1" path="D:\mule\test\output1"
outputPattern="#[function:datestamp:dd-MM-yy]-#[message.inboundProperties[‘originalFilename‘]]"
/>
</flow>
- fileAge=”10000”如果文件文件正在写入,此时进行读取,没有fileAge会报错,fileAge代表正在写入的文件时,等上10秒再进行读取,这时不会报错。
- workDirectory=”D:\mule\test\work” 读取时的备份的文件目录
- workFileNamePattern=”#[message.inboundProperties[‘originalFilename’]]” 读取时备份的文件的文件名生成规则,[message.inboundProperties[‘originalFilename’]]代表用mule expression 语法,代表取输入文件的源文件文件名
- moveToDirectory=”D:\mule\test\backup” 也代表读取文件时,对文件进行再次备份的生成目录,如果connnector中定义,file:inbond-endpoint也定义,以 file:inbond-endpoint定义的为准,即后者会覆盖前者的定义
- moveToPattern=”#[message.inboundProperties[‘originalFilename’]].backup” 同理备份文件的命名的规则
- 代表只读取txt,xml,docx的文件类型,也支持表达式可以定义更加复杂的读取规则
- outputPattern=”#[function:datestamp:dd-MM-yy]-#[message.inboundProperties[‘originalFilename’]]”输出文件的命名格式
在属性中也可以使用如下表达式
- #[function:dateStamp]
- #[function:datestamp:dd-MM-yy]
- #[function:systime]
- #[function:uuid]
- #[message.inboundProperties.originalFilename]
- #[function:count]
- #[message.inboundProperties[‘messagepropertyname’]
以上应用环境mule esb 3.6.1
参考文档:file connector
时间: 2024-11-05 06:26:01