2014-09-26 104 views
1

我想从内部交换模式请求响应的vm入站端点使用异步作用域。这个想法是从vmmainflow异步调用另外两个流。从我从mule文档中了解的情况来看,当vm与请求 - 响应交换模式一起使用时,exceution会在调用vm的同一个线程上进行。我现在需要从这个虚拟机流中调用另外两个流,它们是单向的,可以异步调用。但是,当我从我的mule-config执行以下操作时,出现如下所示的错误。这仅在对服务发出并发请求时发生。我不确定从vm调用异步的方法。如果这种方法是错误的,请告诉我如何去做这件事。我正在考虑使用另一个带入站的流作为vm(单向),它实际调用了两个流,然后从我的vmmainflow调用该新的vm。骡异步抛出handleWorkException

<flow name="vmmainflow"> 
    <vm:inbound-endpoint address="vm://vmmainflow" 
      exchange-pattern="request-response" /> 
    ........ 
    <async> 
     <flow-ref name="flow1" /> 
     <flow-ref name="flow2" /> 
    </async> 
    ..... 
    </flow> 

以下是我的错误:

 Exception in thread "null.processor.async.2" org.mule.api.MuleRuntimeException: An exception occurred while invoking message processor "DefaultMessageProcessorChain '(inner iterating chain) of 'async' child chain' 
[ 
    [email protected], 
    [email protected], 
    [email protected] 
]" for asynchronously. 
org.mule.processor.AsyncInterceptingMessageProcessor handleWorkException] - Work caused exception on 'workCompleted'. Work being executed was: org.mule.processo[email protected]483ebe 
    at org.mule.processor.AsyncInterceptingMessageProcessor.handleWorkException(AsyncInterceptingMessageProcessor.java:197) 
    at org.mule.processor.AsyncInterceptingMessageProcessor.workCompleted(AsyncInterceptingMessageProcessor.java:173) 
    at org.mule.work.WorkerContext.run(WorkerContext.java:368) 
    at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1061) 
    at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:575) 
    at java.lang.Thread.run(Thread.java:662) 
Caused by: java.util.ConcurrentModificationException 
    at org.apache.commons.collections.map.AbstractHashedMap$HashIterator.nextEntry(AbstractHashedMap.java:1113) 
    at org.apache.commons.collections.map.AbstractHashedMap$KeySetIterator.next(AbstractHashedMap.java:938) 
    at java.util.Collections$UnmodifiableCollection$1.next(Collections.java:1010) 
    at org.mule.DefaultMuleMessage.copyMessageProperties(DefaultMuleMessage.java:228) 
    at org.mule.DefaultMuleMessage.<init>(DefaultMuleMessage.java:203) 
    at org.mule.DefaultMuleMessage.<init>(DefaultMuleMessage.java:279) 
    at org.mule.DefaultMuleMessage.newThreadCopy(DefaultMuleMessage.java:1375) 
    at org.mule.DefaultMuleEvent.newThreadCopy(DefaultMuleEvent.java:713) 
    at org.mule.RequestContext.newEvent(RequestContext.java:135) 
    at org.mule.RequestContext.setEvent(RequestContext.java:72) 
    at org.mule.construct.SimpleFlowConstruct.process(SimpleFlowConstruct.java:125) 
    at org.mule.config.spring.factories.FlowRefFactoryBean$1.process(FlowRefFactoryBean.java:40) 
    at org.mule.processor.chain.DefaultMessageProcessorChain.doProcess(DefaultMessageProcessorChain.java:72) 
    at org.mule.processor.chain.AbstractMessageProcessorChain.process(AbstractMessageProcessorChain.java:89) 
    at org.mule.processor.AbstractInterceptingMessageProcessor.processNext(AbstractInterceptingMessageProcessor.java:81) 
    at org.mule.interceptor.AbstractEnvelopeInterceptor.process(AbstractEnvelopeInterceptor.java:55) 
    at org.mule.processor.AsyncInterceptingMessageProcessor.processNextTimed(AsyncInterceptingMessageProcessor.java:122) 
    at org.mule.processor.AsyncInterceptingMessageProcessor$AsyncMessageProcessorWorker.doRun(AsyncInterceptingMessageProcessor.java:212) 
    at org.mule.work.AbstractMuleEventWork.run(AbstractMuleEventWork.java:41) 
    at org.mule.work.WorkerContext.run(WorkerContext.java:309) 
+0

能否请你解释你在这里的问题??你需要提供你的骡子配置,以便你的问题可以被检测到.. – 2014-09-27 06:55:22

+0

请用你的完整骡流更新你的问题..请不要写你的骡子在评论部分流动..这是非常难以阅读..请更新与你的流量问题 – 2014-09-29 10:08:34

+0

请看看更新的问题 – rst 2014-09-29 12:52:32

回答

1

这似乎是一个真正的错误给我。我无法想到可能会做错的事情,这会导致异步消息范围在复制消息属性时抛出ConcurrentModificationException。

也许你的下一步应该是在MuleSoft JIRA中创建一个问题。如果您是MuleSoft企业客户,我鼓励您在您的支持门户中创建一个案例,这可以帮助您将问题转移到线路的前端。我建议链接到这两个StackOverflow问题。