2013-04-20 139 views
3

如何使用代理的faultsequence在ESBWSO2:ESB faultsequence

我想,当发生在端点的故障使用faultsequence。例如,我停止使用jconsole的service1,并希望在呼叫代理服务时将消息路由到service2。但是当我使用的soapUI调用代理就显示故障此消息:系统试图访问无效的服务..

<target> 
    <inSequence > 
    <send> 
     <endpoint name="cal" >  
     <address uri="http://localhost:9763/services/service1/"/> 
     </endpoint> 
    </send> 
    </inSequence> 
    <faultSequence> 
    <log level="custom"> 
     <property name="text" value="An unexpected error occured for service"/> 
     <property name="message" expression="get-property('ERROR_MESSAGE')"/> 
    </log> 
    <send> 
     <endpoint> 
      <address uri="http://localhost:9763/services/service2/"/> 
     </endpoint> 
    </send> 
    </faultSequence> 

请指导我!

回答

0

我相信你的确切场景是你的主要终点的一部分,如果它表现出你需要将消息路由到次要终点。

对您的实施的正确方法是不使用故障顺序正确的方法是使用故障转移端点。你可以在[1] [2]找到参考文件。

有关示例,请参阅“示例53:3个端点之间的故障转移发送”[3]。

[1]。 http://wso2.org/project/esb/java/3.0.1/docs/endpoint_guide.html#FoEp [2]。 http://docs.wso2.org/wiki/display/ESB403/Failover+Endpoint [3]。 http://wso2.org/project/esb/java/3.0.1/docs/samples/endpoint_mediation_samples.html

谢谢, Dharshana。

+0

谢谢亲爱的Dharshana。是的,这是正确的你的假设,但我的次要端点的地址是动态的,我需要一个新的序列(错误序列),它加载类中介,并将消息路由到由中介指定的新目标。所以我认为需要一个错误序列。这是真的吗?因为故障转移中的端点是静态的! – 2013-04-21 06:04:27

+0

可以在故障序列内调用另一个序列。对于您的情况,您需要使用故障顺序。您可以设置targer故障序列如下<目标faultSequence =“测试”> 那么你就可以实现测试序列 – Dharshana 2013-04-21 21:40:38

1

当端点1处于非活动状态时,它会返回肥皂故障,并且您希望它转到故障序列。但是,此时故障顺序被视为响应并发送给客户端(soap ui)。

在WSO2 ESB 4.5.0以后,增加了一个新属性FORCE_ERROR_ON_SOAP_FAULT。通过设置这个属性,肥皂故障将被引导到故障顺序。当您处于故障序列时(例如调用另一个序列),可以执行下一个逻辑。

请参阅[1]以获取示例代理服务。

[1] http://maharachchi.blogspot.com/2012/09/now-you-can-send-soapfaults-to-fault.html

+0

内新的端点逻辑难道这迎合您的需求? – 2013-04-22 18:50:10