我正在尝试使用无服务器编写 Java AWS Lambda。虽然我的由 HTTP 端点触发的 Lambda 部署并正常工作,但我在预定的尝试失败了:
配置看起来像:
来自无服务器.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
我是否需要为传入适当参数的预定 lambda 实现特定的 AWS 接口?
所以事实证明他们应该实现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;
}
}
现在可以成功运行并且不会引发任何异常
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)