我有一个流程,我通过webservice接收请求。我使用组件绑定将该请求转发到JMS队列。但是,我想从该队列中获取异步回复并将其用作对Web服务的响应。我是否需要在流程中使用reply-to和async-reply-router?或者在Mule 3中有没有其他方法可以做到这一点?有什么指针吗?
<flow name="mviService">
<http:inbound-endpoint address="http://localhost:62005/mvi"
exchange-pattern="request-response">
<cxf:jaxws-service serviceClass="com.xyz.services.mvi.MVIServicePortType" />
</http:inbound-endpoint>
<component class="com.pennmutual.services.mvi.MVIServiceImpl">
<binding interface="com.pennmutual.mvi.helper.XMLReqProcessorInterface"
method="process121Order">
<jms:outbound-endpoint queue="mviq.121.order" />
</binding>
</component>
<async-reply>
</async-reply>
</flow>
============编辑 - 请参阅以下重新构思的问题=================
我认为我在描述场景方面做得不好。让我再尝试一次。这是场景 -
我能够从第三方获得响应,并且此响应被命名为名为“mviq.async.service.reply”的队列。我想使用/使用此消息并将其作为对第一次调用MVI的响应返回。
我正在尝试使用“请求回复”。
<request-reply timeout="60000">
<vm:outbound-endpoint path="request" />
<jms:inbound-endpoint queue="mviq.async.service.reply"
exchange-pattern="one-way" />
</request-reply>
问题在于,即使我不想在这种情况下使用出站端点,我仍然必须放置一个,因为request-reply标签需要它。流程在那个时间点等待60秒,但即使我在队列中放入了“mviq.async.service.reply”,相关ID也不匹配,因此服务超时并返回错误。
流程如下所述。
<flow name="mviService">
<http:inbound-endpoint address="http://localhost:62005/mvi"
exchange-pattern="request-response">
<cxf:jaxws-service serviceClass="com.xyz.services.mvi.MVIServicePortType" />
</http:inbound-endpoint>
<component class="com.pennmutual.services.mvi.MVIServiceImpl">
<binding interface="com.xyz.mvi.helper.XMLReqProcessorInterface"
method="process121Order">
<jms:outbound-endpoint queue="mviq.121.order" />
</binding>
</component>
<!-- <logger message="XML Correlation ID 1 is #[mule:message.headers(all)]" /> -->
<request-reply timeout="60000">
<vm:outbound-endpoint path="request" /> <!-- we don't care about this -->
<jms:inbound-endpoint queue="mviq.async.service.reply"
exchange-pattern="one-way" />
</request-reply>
<!-- <component class="com.xyz.mvi.CreateMVIServiceResponse"/> -->
</flow>
===== FLOW与REPLY TO =============
<flow name="mviService">
<http:inbound-endpoint address="http://localhost:62005/mvi"
exchange-pattern="request-response">
<cxf:jaxws-service serviceClass="com.xyz.services.mvi.MVIServicePortType" />
</http:inbound-endpoint>
<component class="com.xyz.services.mvi.MVIServiceImpl">
<binding interface="com.xyz.mvi.helper.XMLReqProcessorInterface"
method="process121Order">
<jms:outbound-endpoint queue="mviq.121.order" exchange-pattern="request-response">
<message-properties-transformer scope="outbound">
<add-message-property key="MULE_REPLYTO" value="mviq.async.service.reply" />
</message-properties-transformer>
</jms:outbound-endpoint>
</binding>
</component>
</flow>
答案 0 :(得分:2)
我建议您不要创建服务组件类,而是使用cxf:proxy-service
,这将使您可以直接访问SOAP信封,并有机会以XML级别的方式组装响应
这将使您摆脱服务组件类对您施加的约束,因此无需使用绑定并打开使用request-response
的大门。
请参阅this SO answer并查看(瘦)proxy service user guide以获取更多信息。