如何在WSO2 ESB应用程序中调用两个端点,而仅调用第二个端点,则第一个端点不会失败或连接被拒绝?

问题描述

我有一个文件发送到端点的应用程序。我要更新该应用程序,以便仅在第一个端点成功的情况下才将同一文件发送到第二个端点。这将作为直接到达第一个端点的确认文件

如何确保我有两个未调用第二个端点的端点,将文件发送到第一个端点时是否存在错误,例如连接被拒绝错误

解决方法

您可以使用过滤器介体来检查后端响应代码。在下面的示例中,我检查了HTTP状态代码,只有当它为200时,才会调用第二个端点。根据您的后端,您可以更改所需的响应代码。过滤器介体与java if-else条件非常相似,您可以参考文档[1]进行进一步说明。在这里,我添加了有效负载工厂中介程序,以在发生故障的情况下创建错误响应。

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="file_upload"
       startOnLoad="true"
       statistics="disable"
       trace="disable"
       transports="http,https">
   <target>
      <inSequence>
         <log level="custom">
            <property name="Invoking " value="First backend"/>
         </log>
         <call>
            <endpoint>
               <http uri-template="http://run.mocky.io/v3/61ebc934-5719-4cc6-8347-f121f18d9f37"/>
            </endpoint>
         </call>
         <filter regex="200" source="$axis2:HTTP_SC">
            <then>
               <log level="custom">
                  <property name="Invoking " value="Second backend"/>
               </log>
               <call>
                  <endpoint>
                     <http uri-template="http://run.mocky.io/v3/49f40df3-bb95-4f43-94fe-282fd72325ec"/>
                  </endpoint>
               </call>
            </then>
            <else>
               <payloadFactory media-type="json">
                  <format>{"Backend":"$1","Response code":"$2"}</format>
                  <args>
                     <arg value="Failute"/>
                     <arg evaluator="xml" expression="$axis2:HTTP_SC"/>
                  </args>
               </payloadFactory>
            </else>
         </filter>
         <respond/>
      </inSequence>
   </target>
   <description/>
</proxy>
                            

[1] -https://docs.wso2.com/display/EI610/Filter+Mediator

更新

ESB应该有一种机制来识别文件是否成功上传。如果无法检查您是否无法验证文件是否成功上传。但是您要检查诸如连接超时之类的问题,您可以将端点的responseAction [2]定义为故障。如果在连接到端点时出现任何问题,它将调用代理服务中定义的故障序列。

<timeout>
            <duration>timeout duration in seconds</duration>
            <responseAction>fault</responseAction>
</timeout>

[2] -https://docs.wso2.com/display/EI611/Endpoint+Error+Handling