Поиск способов обнаружения тайм-аутов AWS Lambda (за несколько секунд до тайм-аута) в Java и тестирования того же

#java #amazon-web-services #aws-lambda

#java #amazon-web-services #aws-lambda

Вопрос:

Моя текущая лямбда-функция синхронно вызывает стороннюю веб-службу.Время ожидания этой функции иногда истекает (текущий тайм-аут установлен на 25 секунд и не может быть увеличен в дальнейшем) Мой код выглядит примерно так:

  handleRequest(InputStream input, OutputStream output, Context context) throws IOException {
       try{
       response = calling 3rd party REST service
       }catch(Exception e){
          //handle exceptions
       }
}
 

1) Я хочу настроить обработку тайм-аута (отслеживание времени и обработка нескольких миллисекунд до фактического тайм-аута) в моей функции Lambda, отправив клиенту пользовательское сообщение об ошибке.
Как я могу эффективно использовать

context.getRemainingTimeInMillis()

способ отслеживания времени, оставшегося до выполнения моего синхронного вызова? Планирую вызвать context.getRemainingTimeInMillis() асинхронно.Это правильный подход? 2) Каков хороший способ протестировать пользовательские функции тайм-аута?

Ответ №1:

Я решил свою проблему, увеличив время ожидания Lambda и вызвав свой процесс в новом потоке и отключив поток через n секунд.

         ExecutorService service = Executors.newSingleThreadExecutor();
         try {
                Runnable r = () ->{
                        try {
                           myFunction();    
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                };
                f = service.submit(r);
                f.get(n, TimeUnit.MILLISECONDS);// attempt the task for n milliseconds
            }catch(TimeoutException toe){
                //custom logic
        }
 

Ответ №2:

Другой вариант — использовать

ReadTimeout

свойство RestClient (в моем случае Джерси) для установки тайм-аута.Но я вижу, что это свойство не работает последовательно в лямбда-коде.Не уверен, что это проблема с клиентом Джерси или с лямбдой.