如何解决Micronaut Lambda 本机图像未读取自定义处理程序
默认情况下,Micronaut 的处理程序是类 MicronautLambdaHandler
。但是在 Micronaut 指南上它说
您将与之交互的主要 API 是 AbstractMicronautLambdaRuntime。一个抽象类,您可以对其进行扩展以创建自定义运行时 mainClass。
所以我尝试创建自定义处理程序和运行时,基本上是复制现有的 MicronautLambdaHandler
和 MicronautLambdaRuntime
自定义 MyRuntime
public class MyRuntime extends AbstractMicronautLambdaRuntime<AwsProxyRequest,AwsProxyResponse,AwsProxyRequest,AwsProxyResponse> {
@Override
protected RequestHandler<AwsProxyRequest,AwsProxyResponse> createRequestHandler(String... args) {
try {
return new MyHandler(createApplicationContextBuilderWithArgs(args));
} catch (ContainerInitializationException e) {
throw new ConfigurationException("Exception thrown instantiating MyHandler",e);
}
}
public static void main(String[] args) {
try {
new MyRuntime().run(args);
} catch (MalformedURLException e) {
e.printstacktrace();
}
}
}
只返回 null 的自定义 MyHandler
@Introspected
public class MyHandler implements RequestHandler<AwsProxyRequest,AwsProxyResponse>,ApplicationContextProvider,Closeable {
protected final MicronautLambdaContainerHandler handler;
public MyHandler() throws ContainerInitializationException {
this.handler = new MicronautLambdaContainerHandler();
}
public MyHandler(ApplicationContextBuilder applicationContextBuilder) throws ContainerInitializationException {
this.handler = new MicronautLambdaContainerHandler(applicationContextBuilder);
}
public MyHandler(ApplicationContext applicationContext) throws ContainerInitializationException {
this.handler = new MicronautLambdaContainerHandler(applicationContext);
}
@Override
public AwsProxyResponse handleRequest(AwsProxyRequest input,Context context) {
System.out.println("hello custom handler");
System.out.println(context.getAwsRequestId());
return null;
}
@Override
public ApplicationContext getApplicationContext() {
return this.handler.getApplicationContext();
}
@Override
public void close() {
this.getApplicationContext().close();
}
}
然后在我的 Lambda 函数上,我将方法处理程序设置为 example.micronaut.MyHandler
,将运行时设置为 Custom Runtime on Amazon Linux 2
在测试我的 Lambda 时,它不会读取我的自定义处理程序。它始终运行默认的 MicronautLambdaHandler
。
另外,奇怪的是,即使我将方法处理程序设置为诸如 this.is.not.a.handler
之类的随机词,它仍然默认运行 MicronautLambdaHandler
。
有没有办法按照指南的建议为 Micronaut Lambda 创建我的自定义处理程序作为本机映像?或者我真的仅限于使用默认的 MicronautLambdaHandler
?
解决方法
能够让它发挥作用。
我需要明确地放置依赖项
implementation("io.micronaut.aws:micronaut-function-aws")
implementation("io.micronaut.aws:micronaut-function-aws-custom-runtime")
我不明白的是,即使没有在 build.gradle 上指定,这些工件也已经存在于类路径中,这就是我从未放置它们的原因。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。