Какой интерфейс должен реализовать запланированная Java-функция без сервера? - PullRequest
4 голосов
/ 22 марта 2019

Я пытаюсь написать Java AWS Lambda с использованием Serverless. В то время как мои Lambdas, запускаемые конечными точками HTTP, развертываются и работают правильно, моя попытка на запланированном сбое не удалась:

Конфиг выглядит так:

от serverless.yml

functions:
  timedHandler:
    handler: com.serverless.TimedHandler
    events:
     - schedule:
        rate(1 minute)

Если я попытаюсь реализовать RequestHandler, как:

public class TimedHandler implements RequestHandler<Request, Response> {
private static final Logger LOG = LogManager.getLogger(Handler.class);

@Override
public Response handleRequest(Request request, Context context) {
    LOG.info("Started up");
    return null;
}

Журналы жалуются, что:

Произошла ошибка при разборе JSON: java.lang.RuntimeException java.lang.RuntimeException: Произошла ошибка при разборе JSON
Вызвано: java.io.UncheckedIOException: com.fasterxml.jackson.databind.JsonMappingException: не удается создать экземпляр com.amazonaws.Request

Я предполагаю, потому что запланированное событие не передается в объекте Request, а является чем-то специфическим для запланированного триггера. Но если я не реализую интерфейс (что хорошо для документации по AWS, это нормально), журналы AWS будут жаловаться

Класс не реализует соответствующий интерфейс обработчика: com.serverless.TimedHandler

Есть ли конкретный интерфейс AWS, который мне нужно реализовать для запланированной лямбды, которая передает соответствующие аргументы?

1 Ответ

4 голосов
/ 22 марта 2019

Получается, что они должны реализовать интерфейс RequestStreamHandler, например:

public class TimedHandler implements RequestStreamHandler {
    private static final Logger LOG = LogManager.getLogger(TimedHandler.class);

    @Override
    public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
        LOG.info("Started up");
        return;
    }

}

Теперь он успешно работает и не выдает исключений

...