Сценарий
Есть двухсторонний HTTP-to-JMS прокси-сервис, т.е. сервис, который:
- Принимает запрос по HTTP
- Помещает его в JMS-очередь queue1
- Ожидает ответа в JMS-очереди queue2
- Отправляет принятый ответ в виде HTTP-ответа
Логично, что между шагами 2 и 3 может пройти сколь угодно большой период времени. Необходимо задать величину таймаута, после которого проски-сервис будет сваливаться в faultSequence.
Решение
Обычный таймауты endpoint-ов тут не работают: WSO2 ESB их игнорирует и использует значение таймаута сокета из глобальных настроек. Однако, есть специальное свойство JMS_WAIT_REPLY:
<endpoint>
<address statistics="disable" trace="disable" uri="jms:/...">
<timeout>
<duration>0</duration>
<responseAction>fault</responseAction>
</timeout>
<markForSuspension>
<retriesBeforeSuspension>0</retriesBeforeSuspension>
<retryDelay>0</retryDelay>
</markForSuspension>
<suspendOnFailure>
<initialDuration>0</initialDuration>
<maximumDuration>0</maximumDuration>
<progressionFactor>1.0</progressionFactor>
</suspendOnFailure>
</address>
<property name="JMS_WAIT_REPLY" value="5000" scope="axis2"/>
</endpoint>
В примере выше таймаут ожидания ответа установлен в 5 секунд.
Комментариев нет:
Отправить комментарий