2015-08-30 2 views
0

Я работаю в службе отдыха. Служба извлекает информацию из устаревшей сторонней системы, используя проприетарный протокол, абстрагированный API, который в настоящее время выставил любой тайм-аут на вызовы в эту систему. Система замедляется по мере увеличения нагрузки на услугу.Тайм-аут Служба отдыха

Есть ли способ заставить службу отправить ответ по умолчанию, если операция занимает слишком много времени ?. Будем очень благодарны за любое предложение о том, как решить эту проблему?

+0

Если вы можете изменить сервер, вы можете делать все, что хотите. Если вы не можете, выполните вызов в отдельном потоке – Raffaele

+0

, какие модификации? – Maro

ответ

0

Я думаю, что вы должны предоставить более подробную информацию о конкретной проприетарной системе, чтобы мы могли лучше понять. Из предоставленной информации до сих пор нет способа реализовать контроль над клиентом, поскольку он является только запрашивающим лицом, не контролирующим эту услугу.

1

Вы можете обернуть блок кода, который делает запрос api в другой поток, а затем использовать Future to timeout для этого запроса.

Вот пример того, как это сделать;

https://stackoverflow.com/a/15120935/975816

После того, как тайм-аута; просто в основном реализуйте Исключения и задайте свой ответ по умолчанию в блоке catch;

String response; 

try { 
    response = future.get(5, TimeUnit.MINUTES); 
} 
catch (InterruptedException ie) { 
    /* Handle the interruption. Or ignore it. */ 
    response = "Default interrupted response"; 
} 
catch (ExecutionException ee) { 
    /* Handle the error. Or ignore it. */ 
    response = "Default exception response"; 
} 
catch (TimeoutException te) { 
    /* Handle the timeout. Or ignore it. */ 
    response = "Default timeout response"; 
} 
Смежные вопросы