使用Mule

时间:2017-01-11 10:36:10

标签: csv amazon-s3 mule polling anypoint-studio

我有3个S3存储桶:

  1. 输入文件
  2. 正在进行中的
  3. 处理-文件
  4. “input-files”存储桶包含一个CSV文件列表,我想一次从存储桶中获取每个输入文件(文件名格式:filename-timestamp)并将其移动到“正在进行中”的存储桶当工作流程完成时,我想将其移动到“已处理文件”存储桶。出错时,所有文件处理都需要停止。

    在我的流程中,我可以获取csv文件的内容,但是没有对文件名的引用,因此不确定如何实现上述内容,因为我无法指定需要移动的文件。

    如何实施上述处理步骤?

    XML流程:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <mule 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.8.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">
    
        <flow name="CsvToMongo" >
            <poll doc:name="Poll">
                <s3:get-object-content config-ref="Amazon_S3__Configuration" bucketName="test-file-bucket" key="input-files/TestData.csv" mimeType="application/csv" doc:name="Amazon S3"/>
            </poll>
            <object-to-string-transformer encoding="UTF-8" mimeType="application/csv" doc:name="Object to String"/>
            <logger message="#['**** Start writing CSV to database...']" level="INFO" doc:name="Logger: Start Process"/>
        </flow>
    </mule>
    

    正在使用的软件: Anypoint Studio 6.2 骡子3.8.1

    由于

1 个答案:

答案 0 :(得分:1)

我最近使用的一种方法是配置Amazon Simple Queue Service (SQS)队列以从存储桶接收S3事件。 (配置存储桶以将事件发送到SQS队列)。

然后在我的Mule流程中,我的输入源是SQS poller

S3 event is well documented at AWS的结构,是一个JSON字符串(convert it to JSON object to use it),包含识别实际文件名所需的所有相关信息。

它工作得非常好。