Конечные точки могут иметь три конфигурации тайм-аута. Никогда не истекайте тайм-аутом, не сбрасывайте и не ошибайтесь. Мне отчаянно нужно продолжить поток после тайм-аута. Есть ли способ добиться этого? Обработчик ошибок (последовательность onError) не является желательным решением этой проблемы. Представьте себе оркестровку с восемью посредниками вызовов, мне нужно было бы создать восемь последовательностей и установить друг друга как ошибку. Это очень быстро приведет к раздуванию углеродных приложений, сделает код нечитаемым и увеличит время развертывания.
Продолжить посредничество последовательности после тайм-аута в посреднике вызовов
Ответы (1)
По сути, в любой момент времени состояние конечной точки может быть одним из следующих.
- Активный
- Тайм-аут
- Приостановить
- ВЫКЛЮЧЕННЫЙ
Когда конечная точка находится в состоянии тайм-аута, она будет продолжать попытки получать сообщения до тех пор, пока одно сообщение не будет успешным или не будет достигнуто максимальное значение повторной попытки. Если достигается максимум, конечная точка помечается как приостановленная. Если одно сообщение завершается успешно, конечная точка помечается как Активная.
Если вам нужно продолжить поток посредничества, когда вы получаете тайм-аут конечной точки в соответствии с конфигурацией тайм-аута конечной точки, вы можете использовать параметр ошибка в responseAction.
Затем, когда конечная точка истекает по таймауту, сработает последовательность сбоев (пользовательская последовательность сбоев, если вы ее уже определили, в противном случае - последовательность сбоев по умолчанию). Если вам нужно продолжить поток посредничества и в соответствии с существующей реализацией, вы можете определить необходимую логику посредничества в настраиваемой последовательности и вызвать эту последовательность в последовательности сбоя следующим образом.
<?xml version="1.0" encoding="UTF-8"?>
<sequence name="customFaultSequence" xmlns="http://ws.apache.org/ns/synapse">
<!-- Log the message at the full log level with the ERROR_MESSAGE and the ERROR_CODE-->
<log level="full">
<property name="MESSAGE" value="Executing default 'fault' sequence"/>
<property expression="get-property('ERROR_CODE')" name="ERROR_CODE" xmlns:ns="http://org.apache.synapse/xsd"/>
<property expression="get-property('ERROR_MESSAGE')" name="ERROR_MESSAGE" xmlns:ns="http://org.apache.synapse/xsd"/>
</log>
<sequence key="afterTimeoutEndpointSequence"/>
</sequence>
Пример прокси-сервиса:
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse" name="TestProxy" startOnLoad="true" statistics="disable" trace="disable" transports="http,https">
<target faultSequence="customFaultSequence">
<inSequence>
<endpoint>
<address uri="http://run.mocky.io/v3/51c11e65-55a7-47e5-ba38-1d86e8e5d7ea?mocky-delay=45000ms">
<timeout>
<duration>2</duration>
<responseAction>fault</responseAction>
</timeout>
</address>
</endpoint>
<respond/>
</inSequence>
<description/>
</proxy>