如何在不到达管道末端的情况下向服务调用者发送响应

时间:2012-03-29 16:05:26

标签: jboss-esb

我有2个自定义操作在同一个服务中逐个执行,如此

<actions mep="RequestResponse">
    <action name="ActionA" class="ClassA"/>
    <action name="ActionB" class="ClassB"/>
</actions>

假设ActionA对收到的消息进行了一些验证。如果验证发现msg无效,您如何向调用者发送有关该失败的响应?

现在,在我的操作中,我在ActionA的消息中设置响应并在其中放置一个标记,表示我在ActionA中发现错误,ActionB在执行其代码之前检查该标记。我发现这种方法很有用,但却是一种负担,因为我的所有操作都必须从以下开始:

if (!markIspressent) {
    //Code goes here
}
return message.

我已尝试在ActionA设置响应消息并返回null以停止管道,但这不起作用。我还尝试了另一种方法,我发现抛出一个ActionProcessingFaultException(message,"SomeTextGoesInHere"),但也没有用。 我的第二个主要问题是ESB尝试重新处理抛出该异常的msg,我没有看到我设置成消息的响应,直到ESB放弃并将其发回。但放弃的时间长达60秒。

所以我的问题是如何在到达服务管道的末尾之前向响应者发送响应消息。

由于

1 个答案:

答案 0 :(得分:3)

管道早期完成的选项包括: - 返回null; - 将服务拆分为三个(注意服务1是OneWay,并根据您的操作的结果路由到相应的服务) 服务1

<actions mep="OneWay">
    <action name="ActionA" class="ClassA"/>
    <action name="ActionA1" class="RouteBasedOnMsgContentTo(Service 2 or Service 3)"/>
</actions>

服务2

<actions mep="RequestResponse">
    <action name="ActionB" class="ClassB"/>
</actions>

服务3

<actions mep="RequestResponse">
    <action name="ActionC" class="ClassC-SimplyRespondsTheProblem"/>
</actions>