Mule 3:在不同主流线程上的异步回复

我是Mule的新手,并且正在研究一个问题,该问题需要一个将消息分派给Mule消息总线的流程,即听众可以收到这些消息,以便在完成这些消息时收到成功处理这些消息的通知。 主要标准是“调度员流程”不会被阻止继续工作(将其他不同的消息放在公共汽车上,以供潜在的其他听众使用)。

我有一个测试应用程序,我已经在MuleStudio(下面)中运行,它包含了我试图实现的基本内容,简化了; 这是一个非常简单的2流应用程序,它使用请求回复来允许第二流将回复发送回主流; 这里主要的问题是主流程的线程被阻塞,阻止它做任何事情,直到响应回来。 有没有办法让回应回到主要流程的不同主线上,或者有其他方式来完成这个标准吗?

感谢您的帮助或指示;-)

...

<!-- simple Groovy transformer that changes the msg payload to a greeting w/ the current time-->
<scripting:transformer name="toCurrentTime">
    <scripting:script engine="groovy">
        import java.text.SimpleDateFormat;

        def DATE_FORMAT_NOW = "yyyy-MM-dd HH:mm:ss";    
        def cal = Calendar.getInstance();
        def sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
        return "Response @ time " + sdf.format(cal.getTime())

    </scripting:script>    
</scripting:transformer>


<!-- 
    note : neither of the following are allowed on the flow b/c of the request-reply    
    processingStrategy="synchronous"
    processingStrategy="queued-asynchronous"
-->

<flow name="main" doc:name="main">

    <http:inbound-endpoint ref="httpEventInjector" doc:name="HTTP"/>

    <logger message="starting main flow" level="INFO"/>

    <request-reply storePrefix="mainFlow">  
        <vm:outbound-endpoint path="worker"></vm:outbound-endpoint>
        <vm:inbound-endpoint path="reply"></vm:inbound-endpoint> 
    </request-reply>


    <!--  processing continues once we get the response on the 'reply' channel above from the worker -->    
    <!--  generate the response for the browser -->    
    <logger message="finishing main flow w/ browser response" level="INFO"/>        
    <response>
        <transformer ref="toCurrentTime"/>
    </response>
</flow>


<flow name="worker" doc:name="worker">      
    <vm:inbound-endpoint path="worker"/>

    <logger message="starting worker task(s) ...." level="INFO"/>

    <scripting:component doc:name="thread-sleep(10s)">
        <scripting:script engine="Groovy">
            System.out.println "about to sleep @ time" + System.currentTimeMillis()
            Thread.sleep(10000);    
            System.out.println "done sleeping @ time" + System.currentTimeMillis()
        </scripting:script>
    </scripting:component>


    <logger message="finishing up worker task(s) ...." level="INFO"/>
</flow>    


你可以使用continuations来实现你想要的。 我写了一篇关于这个话题的博客文章。

链接地址: http://www.djcxy.com/p/52519.html

上一篇: Mule 3 : async reply w/ reply on different main flow thread

下一篇: Node js API in production server