【问题标题】:Got duplicate message While Aggregate: mule esb聚合时收到重复消息:mule esb
【发布时间】:2015-02-19 23:44:27
【问题描述】:

在合并多个文件时遇到问题。我存储两个不同的文件。并将这两个文件合二为一。有时我收到重复的消息。或者某个时候一个文件丢失了。 以下是我的流程

<flow name="CombineFiles" >
        <file:inbound-endpoint path="Custom" responseTimeout="10000" doc:name="File" moveToDirectory="BackUp"/>
        <file:file-to-string-transformer doc:name="File to String"/>
        <scripting:component doc:name="Groovy">
            <scripting:script engine="Groovy"><![CDATA[long now = new java.util.Date().getTime(); 
                long mod = now % 2000; 
                message.setCorrelationId(String.valueOf(now - mod));
                message.setCorrelationGroupSize(100);
                return message;
            ]]></scripting:script>
        </scripting:component> 

        <collection-aggregator  failOnTimeout="false" doc:name="Collection Aggregator" timeout="3000"/>
        <combine-collections-transformer doc:name="Combine Collections"/>
        <logger message="FINAL #[payload]" level="INFO" doc:name="Logger"/>
        <object-to-string-transformer doc:name="Object to String"/>
        <file:outbound-endpoint path="Result" outputPattern="result1" responseTimeout="10000" doc:name="File"/>

    </flow> 

有时我两次收到来自 file1 的消息。或者有一段时间只收到 1 条文件消息。我想合并2个文件。我的流程有什么问题???

【问题讨论】:

  • 如果要合并 2 个文件,为什么要将关联组大小设置为 100?而且,我认为相关ID设置得不好,因为它只取决于文件到达时间。问候,马科斯。
  • 在 2 秒内,文件数量基于我设置的相关 ID 和大小。但是,如果我想整合 2 个文件,那么我必须以什么方式设置相关 ID ??
  • 如果你想合并2个文件,组大小应该是2。如果这个值更大,聚合器会在这2个文件到达后继续等待,实际上聚合器超时是3秒,和你的相关 id mods 2 秒。但是,我认为时间戳模式不是一个好方法,因为文件可以在两秒窗口结束时到达。

标签: mule mule-studio mule-component


【解决方案1】:

就在&lt;combine-collections-transformer/&gt;之后放

 <set-payload value="#[message.payload[0]] #[message.payload[1]]" doc:name="Set Payload"/>

并检查您的问题是否得到解决。我在这里尝试的是从集合聚合器显式设置您的消息... 但请注意,如果有超过 2 个文件,这可能不起作用.. 但由于您的要求是在这里使用 2 个文件作为输入.. 这会很好用

【讨论】:

  • 感谢您的回复.. 这并不是每次都有效,因为... 例如:在文件 1 中,我有“这是文件 1”之类的内容,而在第二个文件中,我有“这个”之类的内容是文件 2”... 有时我得到这个输出“这是文件 2 这是文件 2 这是文件 1” 有时我得到“这是文件 2 这是文件 1”...如果我 SET PAYLOAD 那么我得到“这是文件 2 这是文件 2”它没有显示文件 1 的内容..
  • 您是否按照我提到的方式放置了 set 有效负载?喜欢#[message.payload[0]] #[message.payload[1]]?您需要输入为message.payload[0]message.payload[1]
猜你喜欢
  • 2015-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多