在Mule 3.3.0中看到ConcurrentModificationException

在Mule 3.3.0中看到ConcurrentModificationException,mule,Mule,我对Mule是相当陌生的,使用3.3.0,但我正在尝试我认为应该是相当普通的例子。 我有一个mule配置,它将读取一个csv文件,并尝试异步处理不同流中的行和列。然而,当消息被传递到一个异步流时,我们看到ConcurrentModificationException。我想知道是否有其他人看到过这个问题,他们可能做了什么来解决这个问题 java.util.ConcurrentModificationException 位于org.apache.commons.collections.map.Abs

我对Mule是相当陌生的,使用3.3.0,但我正在尝试我认为应该是相当普通的例子。 我有一个mule配置,它将读取一个csv文件,并尝试异步处理不同流中的行和列。然而,当消息被传递到一个异步流时,我们看到ConcurrentModificationException。我想知道是否有其他人看到过这个问题,他们可能做了什么来解决这个问题

java.util.ConcurrentModificationException 位于org.apache.commons.collections.map.AbstractHashedMap$HashIterator.nextryAbstractHashEdMap.java:1113 位于org.apache.commons.collections.map.AbstractHashedMap$KeySetIterator.nextAbstractHashedMap.java:938 位于org.mule.DefaultMuleEvent.setMessageDefaultMuleEvent.java:933 位于org.mule.DefaultMuleEvent.DefaultMuleEvent.java:318 位于org.mule.DefaultMuleEvent.DefaultMuleEvent.java:290 位于org.mule.DefaultMuleEvent.copyDefaultMuleEvent.java:948


下面是工作正常的dataSub子流的固定版本:

<sub-flow name="dataSub">
    <splitter expression="#[org.mule.util.StringUtils.split(message.payload, '\n\r')]" />
    <splitter expression="#[org.mule.util.StringUtils.split(message.payload, ',')]" />
    <flow-ref name="storageFlow" />
    <all>
        <async>
            <flow-ref name="storageFlow" />
        </async>
        <async>
            <flow-ref name="id" />
        </async>
    </all>
</sub-flow>
请注意:

我使用两个拆分表达式, 我使用一个全消息处理器来确保向两个私有流发送相同的有效负载, 我必须用异步消息处理器包装流引用,否则调用会失败,因为私有流是异步的,但所有强制都是同步的。
下面是工作正常的dataSub子流的固定版本:

<sub-flow name="dataSub">
    <splitter expression="#[org.mule.util.StringUtils.split(message.payload, '\n\r')]" />
    <splitter expression="#[org.mule.util.StringUtils.split(message.payload, ',')]" />
    <flow-ref name="storageFlow" />
    <all>
        <async>
            <flow-ref name="storageFlow" />
        </async>
        <async>
            <flow-ref name="id" />
        </async>
    </all>
</sub-flow>
请注意:

我使用两个拆分表达式, 我使用一个全消息处理器来确保向两个私有流发送相同的有效负载, 我必须用异步消息处理器包装流引用,否则调用会失败,因为私有流是异步的,但所有强制都是同步的。
我不完全理解您的配置。为什么不在第一个表达式拆分器之后使用第二个表达式拆分器?不知道foreach的用途是什么?此外,storageFlow和id flow引用周围没有任何内容,因此这意味着您希望将storageFlow的结果传递给id?但是这些私有流具有异步处理策略,因此它们可能不会返回任何结果。我很困惑:我的经验不足可能是造成你困惑的原因。这样做的目的是创建一条消息,当我尝试使用拆分器时,该消息可以传递给每个流。当我在流引用周围使用拆分器时,我得到一个错误:不,我只是想看看在到达该点之前是否使用过其他方法/尝试。不管怎样,你能分享一个简单的输入文件,这样我们就可以试着复制吗?另外,请指定调用storageFlow和id的预期行为:它们应该接收相同的消息还是一个接一个地链接?预期行为是它们都应该接收相同的消息。我不完全理解您的配置。为什么不在第一个表达式拆分器之后使用第二个表达式拆分器?不知道foreach的用途是什么?此外,storageFlow和id flow引用周围没有任何内容,因此这意味着您希望将storageFlow的结果传递给id?但是这些私有流具有异步处理策略,因此它们可能不会返回任何结果。我很困惑:我的经验不足可能是造成你困惑的原因。这样做的目的是创建一条消息,当我尝试使用拆分器时,该消息可以传递给每个流。当我在流引用周围使用拆分器时,我得到一个错误:不,我只是想看看在到达该点之前是否使用过其他方法/尝试。不管怎样,你能分享一个简单的输入文件,这样我们就可以试着复制吗?另外,请指定调用storageFlow和id的预期行为:它们应该接收相同的消息还是一个接一个地链接?预期行为是它们都应该接收相同的消息。非常好,谢谢!你知道为什么或者你能大胆猜测一下为什么会发生这种异常吗?从概念上讲,我觉得还可以。。。因此,我想知道是什么改变了我的理解。虽然不是100%确定,但我认为,因为foreach更改了消息属性,所以它设置了流变量,并且由于使用排队异步处理策略,消息被异步处理和序列化,当消息不处于稳定状态时,它们将处于稳定状态。一般来说,除非你有充分的理由使用foreach,否则不要使用foreach。最后,如果我的解决方案对您有效,请接受。太好了,谢谢!你知道为什么或者你能大胆猜测一下为什么会发生这种异常吗?从概念上讲,我觉得还可以。。。因此,我想知道是什么改变了我的理解。虽然不是100%确定,但我认为,因为foreach更改了消息属性,所以它设置了流变量,并且由于使用排队异步处理策略,消息被异步处理和序列化,当消息不处于稳定状态时,它们将处于稳定状态。一般来说,除非你有一个强有力的 使用它的理由。最后,如果我的解决方案对您有效,请接受。