wso2在将xml转换为json时速度较慢 5000 过错 101503,101504,101505,101507 100 1 3000 5000 过错 101503,101504,101505,101507 100 1 3000 {statusCode}{statusDescription});]]>

wso2在将xml转换为json时速度较慢 5000 过错 101503,101504,101505,101507 100 1 3000 5000 过错 101503,101504,101505,101507 100 1 3000 {statusCode}{statusDescription});]]>,wso2,wso2esb,Wso2,Wso2esb,上面是我的流程,我正在尝试转换下面的xml <?xml version="1.0" encoding="UTF-8"?> <inSequence xmlns="http://ws.apache.org/ns/synapse"> <log> <property name="Request received to" value="Test2&qu

上面是我的流程,我正在尝试转换下面的xml

<?xml version="1.0" encoding="UTF-8"?>
<inSequence xmlns="http://ws.apache.org/ns/synapse">
    <log>
        <property name="Request received to" value="Test2"/>
    </log>
    <script language="js"><![CDATA[var start = new Date().getTime();var payload = mc.getPayloadXML();var requestId = payload..*::requestId.toString();var timeStamp = payload..*::timeStamp.toString();var msisdn = payload..*::msisdn.toString();var keyWord = payload..*::keyWord.toString();for(var i=0;i<payload..*::dataSet.param.length();i++)     {         if(payload..*::dataSet.param[i].id.toString()=="order_id"){         var orderId =payload..*::dataSet.param[i].value.toString();      }         if(payload..*::dataSet.param[i].id.toString()=="entity_id")          {              var entity_id =payload..*::dataSet.param[i].value.toString();          }      }var end = new Date().getTime();var timeTaken = end - start; print("Time Duration :  " + timeTaken + " ms "); var start2 = new Date().getTime();mc.setPayloadJSON(  {     "Request":{        "request_id":requestId,      "action":"CancelOrder",      "request_timestamp":"208042019210259",      "source_node":"CRM",      "userid":"1",      "username":"SuperAdmin",      "dataset":{           "param":[              {                 "id":"order_id",                  "value":"11265878971023"            },   {                 "id":"sub_order_id",                    "value":"11265878766755"            },            {                 "id":"entity_id",               "value":"003"            }         ]      }   }});var end2 = new Date().getTime();var timeTaken2 = end2 - start2;print("Time taken for set to payload  :  " + timeTaken2 + " ms ");]]></script>
    <call>
        <endpoint>
            <failover>
                <endpoint name="FirstUrl">
                    <http method="POST" uri-template="http://10.0.0.75:8080/Sampleproject-0.0.1-SNAPSHOT/XMLtoJSON">
                        <timeout>
                            <duration>5000</duration>
                            <responseAction>fault</responseAction>
                        </timeout>
                        <suspendOnFailure>
                            <errorCodes>101503,101504,101505,101507</errorCodes>
                            <initialDuration>100</initialDuration>
                            <progressionFactor>1.0</progressionFactor>
                            <maximumDuration>3000</maximumDuration>
                        </suspendOnFailure>
                    </http>
                </endpoint>
                <endpoint name="SecoundUrl">
                    <http method="POST" uri-template="http://10.0.0.75:8080/Sampleproject-0.0.1-SNAPSHOT/XMLtoJSON">
                        <timeout>
                            <duration>5000</duration>
                            <responseAction>fault</responseAction>
                        </timeout>
                        <suspendOnFailure>
                            <errorCodes>101503,101504,101505,101507</errorCodes>
                            <initialDuration>100</initialDuration>
                            <progressionFactor>1.0</progressionFactor>
                            <maximumDuration>3000</maximumDuration>
                        </suspendOnFailure>
                    </http>
                </endpoint>
            </failover>
        </endpoint>
    </call>
    <script language="js"><![CDATA[var statusCode , statusDescription;var resultCode= mc.getPayloadJSON().Response.result_code.toString();if(resultCode == "SC000"){statusCode = "SC0000";statusDescription = "SUCCESS";}else{statusCode = "SC0001";statusDescription = "FAILURE";}mc.setPayloadXML(<Response><statusCode>{statusCode}</statusCode><statusDescription>{statusDescription }</statusDescription></Response>        );]]></script>
    <property name="messageType" scope="axis2" type="STRING" value="application/xml"/>
    <respond/>
</inSequence>

到json,然后在json到xml中调用url和response

我只能发射70 tps,它将达到最大120 tps,减少到40 tps,然后再次增加到120 tps

在脚本中介中sc.setPayloadJSON()每次请求大约需要50到200毫秒

请帮帮我


提前感谢

在TPS高或有效负载大的情况下,不建议使用脚本中介。这将对中介的性能产生重大影响

如果需要提高性能,可以使用类中介[1]或使用现有中介来实现解决方案。在您的情况下,似乎需要一个简单的数据映射。因此,您可以尝试用有效负载工厂中介器替换现有脚本中介器。您可以参考[2]中的示例来构建负载工厂中介器

JSON负载的必要值可以通过XPath获得[3]

[1]-https://docs.wso2.com/display/EI640/Class+调解人 [2]-https://docs.wso2.com/display/ESB500/PayloadFactory+Mediator#PayloadFactoryMediator-Example2:JSON [3]-https://docs.wso2.com/display/EI6xx/Accessing+属性+带+XPath

<Request>
    <requestId><![CDATA[12310209842389]]></requestId>
    <timeStamp><![CDATA[2019/12/25 12:12:12]]> </timeStamp>
    <msisdn> <![CDATA[865545]]></msisdn>
    <keyWord><![CDATA[CANCEL_ORDER_API]]></keyWord>
    <dataSet>
        <param>
            <id><![CDATA[order_id]]></id>
            <value><![CDATA[12310209842396]]></value>
        </param>
        <param>
            <id><![CDATA[entity_id]]></id>
            <value><![CDATA[1]]></value>
        </param>
    </dataSet>
</Request>