【发布时间】:2015-01-20 23:19:07
【问题描述】:
我有流量,我将在根标签Items 下有多个Item。我有拆分器,它拆分每个项目并进行一些处理。之后,我将使用 Collection 聚合器收集所有响应。
在我的流程中,观察到的集合聚合器正在等待某些东西,尽管所有响应都已经到达聚合器。在聚合器之后没有收集响应(因为它正在等待一些响应)。 但我敢肯定(如果 Items 中有 5 个项目),所有响应都会到达聚合器。但不确定为什么聚合器仍然没有传递它的输出(但有时它正在传递)
如果我在聚合器中保持超时 30000 并且在超时 =“false”时失败,现在它已被传递出去,它正在聚合响应(5 个项目)。
但我很确定,消息会在 20000 毫秒内到达聚合器。但它一直在等待一些东西:(。
为什么集合聚合器会出现这种行为。有没有人有线索?请找到配置..
<flow name="Items" doc:name="Items">
<vm:inbound-endpoint exchange-pattern="one-way" path="QUEUE" connector-ref="VM_Q1" doc:name="QUEUE">
</vm:inbound-endpoint>
<splitter expression="#[xpath('/Items/Item')]" doc:name="Splitter"/>
<vm:outbound-endpoint exchange-pattern="one-way" path="OUT1" connector-ref="MAIN_VM" doc:name="Test Queue">
</flow>
<flow name="Items1" doc:name="Items">
<vm:inbound-endpoint exchange-pattern="one-way" path="OUT1" connector-ref="MAIN_VM" doc:name="Test Queue"/>
.............doing some transformation and processing.....
<collection-aggregator failOnTimeout="true" doc:name="Collection Aggregator"/>
</flow>
使用版本:3.5.1 我们如何追踪它到底在等待什么?我保留了记录器并检查了聚合器之前填充的所有 5 个项目。 帮助将不胜感激。谢谢。
编辑: 每次迭代 Item 后的 splitter 组件后的日志
After splitter:{MULE_CORRELATION_SEQUENCE=1, MULE_CORRELATION_GROUP_SIZE=5, MULE_ENCODING=UTF-8, MULE_CORRELATION_ID=9f7447b1-a03b-11e4-85dd-b8ee652d2686}
After splitter:{MULE_CORRELATION_SEQUENCE=2, MULE_CORRELATION_GROUP_SIZE=5, MULE_ENCODING=UTF-8, MULE_CORRELATION_ID=9f7447b1-a03b-11e4-85dd-b8ee652d2686}
After splitter:{MULE_CORRELATION_SEQUENCE=3, MULE_CORRELATION_GROUP_SIZE=5, MULE_ENCODING=UTF-8, MULE_CORRELATION_ID=9f7447b1-a03b-11e4-85dd-b8ee652d2686}
After splitter:{MULE_CORRELATION_SEQUENCE=4, MULE_CORRELATION_GROUP_SIZE=5, MULE_ENCODING=UTF-8, MULE_CORRELATION_ID=9f7447b1-a03b-11e4-85dd-b8ee652d2686}
After splitter:{MULE_CORRELATION_SEQUENCE=5, MULE_CORRELATION_GROUP_SIZE=5, MULE_ENCODING=UTF-8, MULE_CORRELATION_ID=9f7447b1-a03b-11e4-85dd-b8ee652d2686}
收集聚合器之前的日志
Before Collection Aggregator:{MULE_CORRELATION_SEQUENCE=1, MULE_CORRELATION_GROUP_SIZE=5, MULE_ENCODING=UTF-8, MULE_CORRELATION_ID=13783281-a036-11e4-a356-b8ee652d2686, Content-Type=text/plain;charset=UTF-8}
Before Collection Aggregator:{MULE_CORRELATION_SEQUENCE=2, MULE_CORRELATION_GROUP_SIZE=5, MULE_ENCODING=UTF-8, MULE_CORRELATION_ID=9f7447b1-a03b-11e4-85dd-b8ee652d2686, Content-Type=text/plain;charset=UTF-8}
Before Collection Aggregator:{MULE_CORRELATION_SEQUENCE=2, MULE_CORRELATION_GROUP_SIZE=5, MULE_ENCODING=UTF-8, MULE_CORRELATION_ID=9f7447b1-a03b-11e4-85dd-b8ee652d2686, Content-Type=text/plain;charset=UTF-8}
Before Collection Aggregator:{MULE_CORRELATION_SEQUENCE=2, MULE_CORRELATION_GROUP_SIZE=5, MULE_ENCODING=UTF-8, MULE_CORRELATION_ID=9f7447b1-a03b-11e4-85dd-b8ee652d2686, Content-Type=text/plain;charset=UTF-8}
Before Collection Aggregator:{MULE_CORRELATION_SEQUENCE=2, MULE_CORRELATION_GROUP_SIZE=5, MULE_ENCODING=UTF-8, MULE_CORRELATION_ID=9f7447b1-a03b-11e4-85dd-b8ee652d2686, Content-Type=text/plain;charset=UTF-8}
@David 请建议。 MULE_CORRELATION_SEQUENCE=2 重复多次。但是对于每个correlation_seq=2,获取有效负载是正确的并且不同。如何解决这个问题?
【问题讨论】:
-
您能否记录
Items1中收到的消息的MULE_CORRELATION_ID、MULE_CORRELATION_GROUP_SIZE和MULE_CORRELATION_SEQUENCE属性的值?我想知道这些是否具有正确的聚合值。 -
@DavidDossot 你完全正确。我已经在拆分器之后使用日志编辑了我的问题,并在收集聚合器之前使用了日志。请看一眼。据观察,MULE_CORRELATION_SEQUENCE = 2 重复多次(不允许 seq=3,4,5)。怎样才能摆脱这种情况。
-
@DavidDossot 某些情况下集合聚合器被传递出去(传播响应)。即使在那些情况下,我观察到 MULE_CORRELATION_SEQUENCE = 2 就像上面的失败场景一样重复。但是这里的集合聚合器取得了成功。我不确定如何预测这一点。示例:如果我调用 5 个案例,其中 4 个为失败(消息未从聚合器中收集),1 个为成功(聚合器可以将消息传递出去)。
标签: mule mule-studio mule-el mule-component