mule esb 文件传输

问题:如何使用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" />
  1. file:connecctor 采用file的方式进行连接
  2. name=”input”命名是了后期使用引用
  3. autoDelete=”true” 读取后自动删除文件
  4. pollingFrequency=”1000” 轮询频率 1000代表1000毫秒=1秒
<file:connector name="output" outputAppend="false" doc:name="File" />
  1. 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>
  1. path是导入的文件路径,如果是局域网内的共享文件夹,就是共享文件夹路径:exampe:path=”\10.66.88.1\input”代表10.66.88.1下面的共享文件夹
  2. connector-ref=”input”代表引用上面定义的file:connector
  3. responseTimeout=”10000”不响应或者出错,10秒以后再次扫描
  4. file:inbound-endpoint 代表文件输入端
  5. file:outbound-
  6. 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> 
  1. fileAge=”10000”如果文件文件正在写入,此时进行读取,没有fileAge会报错,fileAge代表正在写入的文件时,等上10秒再进行读取,这时不会报错。
  2. workDirectory=”D:\mule\test\work” 读取时的备份的文件目录
  3. workFileNamePattern=”#[message.inboundProperties[‘originalFilename’]]” 读取时备份的文件的文件名生成规则,[message.inboundProperties[‘originalFilename’]]代表用mule expression 语法,代表取输入文件的源文件文件名
  4. moveToDirectory=”D:\mule\test\backup” 也代表读取文件时,对文件进行再次备份的生成目录,如果connnector中定义,file:inbond-endpoint也定义,以 file:inbond-endpoint定义的为准,即后者会覆盖前者的定义
  5. moveToPattern=”#[message.inboundProperties[‘originalFilename’]].backup” 同理备份文件的命名的规则
  6. 代表只读取txt,xml,docx的文件类型,也支持表达式可以定义更加复杂的读取规则
  7. outputPattern=”#[function:datestamp:dd-MM-yy]-#[message.inboundProperties[‘originalFilename’]]”输出文件的命名格式

在属性中也可以使用如下表达式

  1. #[function:dateStamp]
  2. #[function:datestamp:dd-MM-yy]
  3. #[function:systime]
  4. #[function:uuid]
  5. #[message.inboundProperties.originalFilename]
  6. #[function:count]
  7. #[message.inboundProperties[‘messagepropertyname’]

以上应用环境mule esb 3.6.1

参考文档:file connector

你可能感兴趣的:(自动化,文件传输,mule-esb)