5.4 异步请求-响应方式
异步请求-响应方式即请求方调用服务后不需要立即获得返回结果,component将请求发送给其他外围系统处理(可能有多个),全部处理完毕后通过指定的异步应答Router返回给请求方。
异步请求-响应方式通过在OutBound Endpoint中增加reply-to以及增加async-reply节点实现,响应配置如下:
cxf-synchronous-request-response.xml
Xml代码
. <?xml version="1.0" encoding="UTF-8"?>
<mule xmlns="http://www.mulesoft.org/schema/mule/core"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:stdio="http://www.mulesoft.org/schema/mule/stdio"
xmlns:vm="http://www.mulesoft.org/schema/mule/vm"
xmlns:http="http://www.mulesoft.org/schema/mule/http"
xmlns:https="http://www.mulesoft.org/schema/mule/https"
xmlns:mulexml="http://www.mulesoft.org/schema/mule/xml"
xmlns:axis="http://www.mulesoft.org/schema/mule/axis"
xmlns:cxf="http://www.mulesoft.org/schema/mule/cxf"
xsi:schemaLocation="
http://www.mulesoft.org/schema/mule/stdio http://www.mulesoft.org/schema/mule/stdio/current/mule-stdio.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/vm http://www.mulesoft.org/schema/mule/vm/current/mule-vm.xsd
http://www.mulesoft.org/schema/mule/cxf http://www.mulesoft.org/schema/mule/cxf/current/mule-cxf.xsd">
<vm:connector name="vm"
numberOfConcurrentTransactedReceivers="1" />
<stdio:connector name="stdioConnector"
messageDelayTime="1234" outputMessage="输出信息" promptMessage="输入信息:" />
<model>
<service name="async req-rep">
<inbound>
<stdio:inbound-endpoint name="in" system="IN" connector-ref="stdioConnector" exchange-pattern="one-way" />
</inbound>
<component class="com.easyway.esb.mule.cxf.StdIo" />
<outbound>
<multicasting-router>
<vm:outbound-endpoint path="async.queue1" exchange-pattern="one-way" />
<vm:outbound-endpoint path="async.queue2" exchange-pattern="one-way" />
<reply-to address="vm://reply" />
</multicasting-router>
</outbound>
<async-reply timeout="5000" failOnTimeout="true">
<vm:inbound-endpoint path="reply" exchange-pattern="one-way" />
<single-async-reply-router />
</async-reply>
</service>
</model>
</mule>
服务器启动并测试:
Java代码
public class MuleCxfMain {
public static void main(String[] args) {
try {
String configFile = "cxf-synchronous-request-response.xml";
String[] configFileArr = new String[] {configFile };
MuleContextFactory muleContextFactory = new DefaultMuleContextFactory();
MuleContext muleContext = muleContextFactory.createMuleContext(new SpringXmlConfigurationBuilder(
configFileArr));
muleContext.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}