【问题标题】:Get read time out when Call restful API in the sequence with Iterate mediator in wso2 ESB在 wso2 ESB 中使用 Iterate 调解器按顺序调用 restful API 时获取读取超时
【发布时间】:2016-10-06 01:04:17
【问题描述】:

我是 WSO2 ESB 的新手。我需要你的帮助。我通过 DSS 从数据库中获取数据,并通过调用(以块模式)或发送中介将它们发送到休息 Web 服务。我通过迭代调解器将我的记录拆分为 ESB 中的单个消息,并将迭代调解器属性设置为 ture,然后将日期作为参数发送到我的 API。我可以在日志中看到迭代调解器将记录拆分为单个消息并将它们正确放入我的 html 端点。 但是在调用我的端点后,我在 ESB 中得到了“读取超时响应”。如果我不使用迭代调解器并将参数直接放在属性中作为测试并将它们发送到我的休息 API,它工作正常。但是当我使用 Iterate 调解器从 DSS 获取参数并将它们发送到 API 时,它面临超时错误。 我检查了日志调解器以查看发生了什么,错误无法通过邮件发送到我的端点并读取超时。我从 ESB 日志中复制了我的端点的 URL,并尝试通过 SoapUI 调用它,它工作正常,没有任何超时问题。

我的 api 是 civicrm api:我的 Api 参数已定义:

contact_type={uri.var.contact_type}
first_name={uri.var.first_name}
last_name={uri.var.last_name}

我通过阻塞模式为调用 API 使用调用中介器为 true。 我从 DSS 发送了 first_name、last_name、contact_type:

<Submissions>
 <Submission>
  <contact_type>Individual</contact_type>
  <first_name>Testname</first_name>
  <last_name>TestFamily</last_name>
</Submission>
</Submissions>

在迭代中介后,我放了日志中介,可以看到上面的值。 调用端点后,我收到此错误: http://localhost/CIVICRM/sites/all/modules/civicrm/extern/rest.php?entity=Contact&action=create&key=1111&user=test&pass=passsss&api_key=1111111111&version=3&contact_type=Individual&first_name=Testname&last_name=TestFamily,MessageID:urn:uuid:daa47ef5-1f7a-4f2c-9372-ba17f0e282ee,方向:响应,MESSAGE = 执行默认的“故障”序列,ERROR_CODE = 401000,ERROR_MESSAGE = 读取超时

当我将此端点放在 SoapUI 中时,它可以工作。 当我不使用DSS并直接按顺序迭代调解器和Put参数时,它可以工作。

感谢您的帮助。谢谢

【问题讨论】:

    标签: rest api wso2esb


    【解决方案1】:

    当您的后端未发送响应时,可能会发生这种情况。所以你可以在发送中介之前设置以下属性来摆脱这个。

    <property name="OUT_ONLY" value="true"/>
    

    【讨论】:

    • 谢谢,我在那之前放了 Out_Only peroprty。但它仍然无法发布我的请求。一旦我在没有迭代中介的情况下尝试了它并手动按顺序放置我的参数,它就可以正常工作了。
    • 你能分享你的代理配置吗?
    【解决方案2】:

    是的,感谢您的考虑。工作正常的顺序是:

    <sequence xmlns="http://ws.apache.org/ns/synapse"
              name="importCiviCRM"
              trace="disable">
       <property name="uri.var.type"
                 value="Individual"
                 scope="default"
                 type="STRING"/>
       <property name="uri.var.first"
                 value="aaaaaa"
                 scope="default"
                 type="STRING"/>
       <property name="uri.var.last"
                 value="bbbbbbb"
                 scope="default"
                 type="STRING"/>
       <property name="FORCE_HTTP_CONTENT_LENGTH"
                 value="true"
                 scope="axis2"
                 type="STRING"/>
       <property name="COPY_CONTENT_LENGTH_FROM_INCOMING"
                 value="true"
                 scope="axis2"
                 type="STRING"/>
       <property name="HTTP_METHOD" value="POST" scope="axis2" type="STRING"/>
       <property name="messageType"
                 value="application/xml"
                 scope="axis2"
                 type="STRING"/>
       <header name="To" scope="default" action="remove"/>
       <property name="OUT_ONLY" value="true" scope="default" type="STRING"/>
       <property name="NO_ENTITY_BODY" scope="axis2" action="remove"/>
    
       <send buildmessage="true">
          <endpoint key="CiviImport"/>
       </send>
    </sequence>
    

    我用属性 Response=True 而不是 OUT_ONLY 尝试了上面的序列,它也可以正常工作。

    我的终点是:

    <endpoint xmlns="http://ws.apache.org/ns/synapse" name="CiviImport">
       <http uri-template="http://localhost/CIVICRM%20WAREHOUSE/sites/all/modules/civicrm/extern/rest.php?entity=Contact&amp;action=create&amp;key=111111&amp;user=Testuser&amp;pass=Testpass&amp;api_key=111111111&amp;version=3&amp;contact_type={uri.var.type}&amp;first_name={uri.var.first}&amp;last_name={uri.var.last}"/>
    </endpoint>
    

    但是当我尝试从 DSS 获取 first_name、last_name 和 contact_type 并使用 Iterate mediator 将消息拆分为单独的消息时,我遇到了问题。这是我的顺序:

    <?xml version="1.0" encoding="UTF-8"?>
    <sequence xmlns="http://ws.apache.org/ns/synapse" name="CiviCrmAPI">
       <iterate xmlns:dss="http://ws.wso2.org/dataservice"
                xmlns:ns="http://org.apache.synapse/xsd"
                continueParent="true"
                id="IterateRequestSink"
                expression="//dss:Submission"
                sequential="true">
          <target>
             <sequence>
                <property name="uri.var.type"
                          expression="//dss:contact_type/text()"
                          scope="default"
                          type="STRING"/>
                <property name="uri.var.first"
                          expression="//dss:first_name/text()"
                          scope="default"
                          type="STRING"/>
                <property name="uri.var.last"
                          expression="//dss:last_name/text()"
                          scope="default"
                          type="STRING"/>
                <log>
                   <property name="uri.var.type" expression="get-property('uri.var.type')"/>
                   <property name="uri.var.first" expression="get-property('uri.var.first')"/>
                   <property name="uri.var.last" expression="get-property('uri.var.last')"/>
                </log>
                <property name="FORCE_HTTP_CONTENT_LENGTH"
                          value="true"
                          scope="axis2"
                          type="STRING"/>
                <property name="COPY_CONTENT_LENGTH_FROM_INCOMING"
                          value="true"
                          scope="axis2"
                          type="STRING"/>
                <property name="HTTP_METHOD" value="POST" scope="axis2" type="STRING"/>
                <property name="messageType"
                          value="application/xml"
                          scope="axis2"
                          type="STRING"/>
                <header name="To" scope="default" action="remove"/>
                <property name="OUT_ONLY" value="true" scope="default" type="STRING"/>
                <property name="NO_ENTITY_BODY" scope="axis2" action="remove"/>
                <send buildmessage="true">
                   <endpoint key="CiviImport"/>
                </send>
             </sequence>
          </target>
       </iterate>
    </sequence>
    

    【讨论】:

      【解决方案3】:

      我已在 Send mediator 之前将 Disable-chunking 属性设置值添加为 true。

       <property name="DISABLE_CHUNKING" value="true" scope="axis2"/>
      

      问题解决了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多