gpt4 book ai didi

Mule ESB - 两个文件作为输入(同时等待)

转载 作者:行者123 更新时间:2023-12-04 15:45:35 25 4
gpt4 key购买 nike

我想在哪里做一个流程:

  • 等待两个文件:file_name.xdf 和 file_name.dff :如果两个文件(我想同时处理两个文件(等待两个文件),这些文件的文件名应该相同)
  • 处理这些文件转换为字节数组
  • 运行 groovy 脚本

  • 我怎样才能提出第一点?

    最佳答案

    您可以根据文件的“基本名称”聚合文件(即取不带扩展名的文件名),然后处理聚合集中的每个文件。

    可以使用 Collection-Aggregator 或 Custom-Aggregator 执行聚合,这里每个示例都有一个示例:

    使用集合聚合器:

    <flow name="two-files-per-process-with-collection-aggregator">
    <file:inbound-endpoint path="/file-in" moveToDirectory="/file-in-process" responseTimeout="10000" doc:name="Read files" >
    <file:filename-regex-filter pattern=".*\.aaa|.*\.bbb" caseSensitive="true"/>
    </file:inbound-endpoint>
    <set-property propertyName="MULE_CORRELATION_ID" value="#[message.inboundProperties.originalFilename.substring(0,message.inboundProperties.originalFilename.lastIndexOf('.'))]" doc:name="Set Correlation-Id"/>
    <set-property propertyName="MULE_CORRELATION_GROUP_SIZE" value="2" doc:name="Set Correlation-Group-Size"/>
    <collection-aggregator failOnTimeout="true" doc:name="Collection Aggregator"/>
    <foreach doc:name="For Each">
    <logger message="#[message.inboundProperties.originalFilename]" level="INFO" doc:name="Some process"/>
    </foreach>
    </flow>

    使用自定义聚合器(您将需要自定义 java 类):
    <flow name="two-files-per-process-with-custom-aggregator">
    <file:inbound-endpoint path="/file-in" moveToDirectory="/file-in-process" responseTimeout="10000" doc:name="Read files">
    <file:filename-regex-filter pattern=".*\.aaa|.*\.bbb" caseSensitive="true"/>
    </file:inbound-endpoint>
    <custom-aggregator failOnTimeout="true" class="org.mnc.MatchFileNames" doc:name="Custom Aggregator"/>
    <foreach doc:name="For Each">
    <logger message="#[message.inboundProperties.originalFilename]" level="INFO" doc:name="Some process"/>
    </foreach>
    </flow>

    这是自定义聚合器的可能实现(它可能更优雅:
    package org.mnc;

    import org.mule.api.MuleContext;
    import org.mule.api.MuleEvent;
    import org.mule.api.routing.RoutingException;
    import org.mule.routing.AbstractAggregator;
    import org.mule.routing.EventGroup;
    import org.mule.routing.correlation.EventCorrelatorCallback;

    public class MatchFileNames extends AbstractAggregator {

    @Override
    protected EventCorrelatorCallback getCorrelatorCallback(final MuleContext muleContext) {
    return new EventCorrelatorCallback() {

    @Override
    public boolean shouldAggregateEvents(EventGroup events) {
    return events.size()==2;
    }

    @Override
    public EventGroup createEventGroup(MuleEvent event, Object id) {
    String filename = event.getMessage().getInboundProperty("originalFilename");
    String commonFilename = filename.substring(0, filename.lastIndexOf('.'));
    System.out.println(filename + " -> " + commonFilename);
    return new EventGroup(commonFilename, muleContext, 2, true, storePrefix);
    }

    @Override
    public MuleEvent aggregateEvents(EventGroup events) throws RoutingException {
    return events.getMessageCollectionEvent();
    }
    };
    }
    }

    关于Mule ESB - 两个文件作为输入(同时等待),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16180507/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com