#wso2 #wso2carbon #wso2ei #mediator
#wso2 #wso2-предприятие-интегратор #посредник
Вопрос:
Я боролся с посредничеством дроссельной заслонки WSO2 и настроил его с использованием документации WSO2. Тем не менее, я не могу достичь желаемой цели получения эффекта от политики.
Хотя код есть, но в политике написано что-то вроде этого:
- ЕСЛИ запрос поступает с IP ={{MY_IP}} и количество запросов <= 10
- ЗАТЕМ вызовите конечную точку / последовательность (AcceptSequence) -> При этом будет вызвана конечная точка
- В ПРОТИВНОМ СЛУЧАЕ, ЕСЛИ количество запросов> 10, запросы будут регистрироваться в базе данных.
Я протестировал конечную точку для последовательности принятия и службу данных EI для rejectSequence как по отдельности, так и работают нормально. Я даже вижу запрос, поступающий в журналах EI wso2carbon, но нет никаких признаков вызова посредника дроссельной заслонки и возвращает «202 Принято»
<?xml version="1.0" encoding="UTF-8"?>
<api context="/my_api" name="MY_API" version="1.0.0" version-type="context" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="POST">
<inSequence>
<log level="custom">
<property expression="json-eval($)" name="Incoming Payload"/>
</log>
<property description="Client_Name" expression="$trp:Client_Name" name="Client_Name" scope="default" type="STRING"/>
<property description="Client_DOB" expression="$trp:Client_DOB" name="Client_DOB" scope="default" type="STRING"/>
<property description="Client_ID_Type" expression="$trp:Client_ID_Type" name="Client_ID_Type" scope="default" type="STRING"/>
<property description="Client_ID_No" expression="$trp:Client_ID_No" name="Client_ID_No" scope="default" type="STRING"/>
<property description="Client_Gender" expression="$trp:Client_Gender" name="Client_Gender" scope="default" type="STRING"/>
<property description="Client_Nationality" expression="$trp:Client_Nationality" name="Client_Nationality" scope="default" type="STRING"/>
<property description="Source_System" expression="$trp:Source_System" name="Source_System" scope="default" type="STRING"/>
<property description="Transaction_Type" expression="$trp:Transaction_Type" name="Transaction_Type" scope="default" type="STRING"/>
<property description="Transaction_Ref_No" expression="$trp:Transaction_Ref_No" name="Transaction_Ref_No" scope="default" type="STRING"/>
<property description="Transaction_Ref_No_2" expression="$trp:Transaction_Ref_No_2" name="Transaction_Ref_No_2" scope="default" type="STRING"/>
<property description="Transaction_Date" expression="$trp:Transaction_Date" name="Transaction_Date" scope="default" type="STRING"/>
</inSequence>
<outSequence>
<throttle id="myThrottle" onAccept="acceptSequence" onReject="rejectSequence">
<policy>
<wsp:Policy wsu:id="WSO2MediatorThrottlingPolicy" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<throttle:MediatorThrottleAssertion xmlns:throttle="http://www.wso2.org/products/wso2commons/throttle">
<throttle:MaximumConcurrentAccess>0</throttle:MaximumConcurrentAccess>
<wsp:Policy>
<throttle:ID throttle:type="IP">{{Required_IP}}</throttle:ID>
<wsp:Policy>
<throttle:Control>
<wsp:Policy>
<throttle:MaximumCount>10</throttle:MaximumCount>
<throttle:UnitTime>60000</throttle:UnitTime>
<throttle:ProhibitTimePeriod>60000</throttle:ProhibitTimePeriod>
</wsp:Policy>
</throttle:Control>
</wsp:Policy>
</wsp:Policy>
</throttle:MediatorThrottleAssertion>
</wsp:Policy>
</policy>
</throttle>
<log/>
</outSequence>
<faultSequence/>
</resource>
</api>
Ответ №1:
Посредник дроссельной заслонки работает не так, как ожидалось, не из-за проблемы с посредником дроссельной заслонки, а из-за того, как вы это реализовали.
В последовательности вы определили только журнал и некоторые посредники свойств. При этой реализации вывод не будет вызван. Поскольку вы внедрили посредник дроссельной заслонки в конечном итоге, и поскольку это не выполняется, вы можете вызывать API без ограничения запросов. Вы можете обратиться к некоторой документации, чтобы уточнить, что касается посредничества сообщений EI (например: [1])
Сообщения будут передаваться на выход из последовательности только в следующих двух сценариях.
- Если вы использовали посредник обратной связи [2]
- Если вы использовали посредника отправки для вызова серверной части. В этом случае ответ от серверной части отправляется на выход.
Поэтому для решения этой проблемы у вас есть 2 варианта.
- Добавьте посредника обратной связи в конце посредников свойств в последовательности
- Измените посредничество следующим образом, чтобы получить посредника дроссельной заслонки в последовательности.
<?xml version="1.0" encoding="UTF-8"?>
<api xmlns="http://ws.apache.org/ns/synapse" context="/my_api" name="MY_API" version="1.0.0" version-type="context">
<resource methods="POST">
<inSequence>
<log level="custom">
<property expression="json-eval($)" name="Incoming Payload" />
</log>
<property description="Client_Name" expression="$trp:Client_Name" name="Client_Name" scope="default" type="STRING" />
<property description="Client_DOB" expression="$trp:Client_DOB" name="Client_DOB" scope="default" type="STRING" />
<property description="Client_ID_Type" expression="$trp:Client_ID_Type" name="Client_ID_Type" scope="default" type="STRING" />
<property description="Client_ID_No" expression="$trp:Client_ID_No" name="Client_ID_No" scope="default" type="STRING" />
<property description="Client_Gender" expression="$trp:Client_Gender" name="Client_Gender" scope="default" type="STRING" />
<property description="Client_Nationality" expression="$trp:Client_Nationality" name="Client_Nationality" scope="default" type="STRING" />
<property description="Source_System" expression="$trp:Source_System" name="Source_System" scope="default" type="STRING" />
<property description="Transaction_Type" expression="$trp:Transaction_Type" name="Transaction_Type" scope="default" type="STRING" />
<property description="Transaction_Ref_No" expression="$trp:Transaction_Ref_No" name="Transaction_Ref_No" scope="default" type="STRING" />
<property description="Transaction_Ref_No_2" expression="$trp:Transaction_Ref_No_2" name="Transaction_Ref_No_2" scope="default" type="STRING" />
<property description="Transaction_Date" expression="$trp:Transaction_Date" name="Transaction_Date" scope="default" type="STRING" />
<throttle id="myThrottle" onAccept="acceptSequence" onReject="rejectSequence">
<policy>
<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:id="WSO2MediatorThrottlingPolicy">
<throttle:MediatorThrottleAssertion xmlns:throttle="http://www.wso2.org/products/wso2commons/throttle">
<throttle:MaximumConcurrentAccess>0</throttle:MaximumConcurrentAccess>
<wsp:Policy>
<throttle:ID throttle:type="IP">{{Required_IP}}</throttle:ID>
<wsp:Policy>
<throttle:Control>
<wsp:Policy>
<throttle:MaximumCount>10</throttle:MaximumCount>
<throttle:UnitTime>60000</throttle:UnitTime>
<throttle:ProhibitTimePeriod>60000</throttle:ProhibitTimePeriod>
</wsp:Policy>
</throttle:Control>
</wsp:Policy>
</wsp:Policy>
</throttle:MediatorThrottleAssertion>
</wsp:Policy>
</policy>
</throttle>
</inSequence>
<outSequence>
<log />
<send />
</outSequence>
<faultSequence />
</resource>
</api>
[1]-https://docs.wso2.com/display/EI611/WSO2 Enterprise Integrator Best Practices [2]-https://ei.docs.wso2.com/en/7.2.0/micro-integrator/references/mediators/loopback-Mediator/