Wso2 在调用中介中超时后继续序列中介

Wso2 在调用中介中超时后继续序列中介,wso2,wso2esb,wso2ei,Wso2,Wso2esb,Wso2ei,端点可以有三种超时配置。永远不要超时、放弃或出错。我迫切需要在超时后继续流。有没有办法做到这一点?故障处理程序(onError序列)不是此问题的理想解决方案。想象一下有八个调用中介的编排,我必须创建八个序列并将彼此设置为错误。这将很快使碳应用程序膨胀,使代码无法读取并增加部署时间。基本上,在任何给定时间,端点的状态都可能是以下状态之一 活跃的 超时 暂停 关 当端点处于“超时”状态时,它将继续尝试接收消息,直到一条消息成功或达到最大重试设置。如果达到端点标记为“挂起”的最大值。如果一条消息成功,

端点可以有三种超时配置。永远不要超时、放弃或出错。我迫切需要在超时后继续流。有没有办法做到这一点?故障处理程序(onError序列)不是此问题的理想解决方案。想象一下有八个调用中介的编排,我必须创建八个序列并将彼此设置为错误。这将很快使碳应用程序膨胀,使代码无法读取并增加部署时间。

基本上,在任何给定时间,端点的状态都可能是以下状态之一

  • 活跃的
  • 超时
  • 暂停
  • 当端点处于“超时”状态时,它将继续尝试接收消息,直到一条消息成功或达到最大重试设置。如果达到端点标记为“挂起”的最大值。如果一条消息成功,则端点标记为“活动”

    如果在根据端点超时配置获得端点超时时需要继续中介流,则可以在响应操作中使用fault选项

    然后,每当端点超时时,将命中故障序列(如果已经定义了自定义故障序列,则为自定义故障序列,否则为默认故障序列)。如果需要继续中介流,并且根据现有实现,可以在自定义序列中定义所需的中介逻辑,并在错误序列中调用该序列,如下所示

        <?xml version="1.0" encoding="UTF-8"?>
    <sequence name="customFaultSequence" xmlns="http://ws.apache.org/ns/synapse">
        <!-- Log the message at the full log level with the ERROR_MESSAGE and the ERROR_CODE-->
        <log level="full">
             <property name="MESSAGE" value="Executing default 'fault' sequence"/>
             <property expression="get-property('ERROR_CODE')" name="ERROR_CODE" xmlns:ns="http://org.apache.synapse/xsd"/>
             <property expression="get-property('ERROR_MESSAGE')" name="ERROR_MESSAGE" xmlns:ns="http://org.apache.synapse/xsd"/>
        </log>
        <sequence key="afterTimeoutEndpointSequence"/>
    </sequence>
    
    
    
    代理服务示例:

    <?xml version="1.0" encoding="UTF-8"?>
    <proxy xmlns="http://ws.apache.org/ns/synapse" name="TestProxy" startOnLoad="true" statistics="disable" trace="disable"    transports="http,https">
       <target faultSequence="customFaultSequence">
          <inSequence>
                   <endpoint>
                      <address uri="http://run.mocky.io/v3/51c11e65-55a7-47e5-ba38-1d86e8e5d7ea?mocky-delay=45000ms">
                         <timeout>
                            <duration>2</duration>
                            <responseAction>fault</responseAction>
                         </timeout>
                      </address>
                   </endpoint>
               <respond/>
          </inSequence>
       <description/>
    </proxy>
    
    
    2.
    过错
    
    中介的其余部分是否取决于端点调用的响应?是和否。在现实生活中的示例中,我们使用自定义模板,将请求记录到数据库,调用目标端点,将响应记录到数据库。这是一个抽象层,基本上是我们的自定义框架。现在我们有几个用例,我们想调用一个系统,如果不管怎样都失败了,就调用另一个系统。它基本上是一个过滤器,在这里我们检查数据,如果没有找到数据,用不同的请求调用第二个系统。问题是,超时会停止中介,清除继续堆栈并调用错误处理程序。我需要调用mediator来不执行错误序列,而是继续执行。从上面的示例中,很明显我们为什么不能使用错误序列。我们只能在抽象模板中设置一个onError序列,但是每个用例都需要做出不同的反应,它们不能共享这个错误序列。正如我所说的,错误处理程序(就是这种情况)不是一个可行的解决方案。我需要在调用mediator之后以相同的顺序继续mediaton,而不是以不同的顺序。我不想使用fault responseAction并基本上调用一个错误序列,这是我们一年来一直在做的事情,它开始以一种干净代码的方式变得可怕。@TomášMrázek,根据当前的体系结构,您必须遵循上述方法来实现您的需求。