微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Micronaut Lambda 本机图像未读取自定义处理程序

如何解决Micronaut Lambda 本机图像未读取自定义处理程序

认情况下,Micronaut 的处理程序是类 MicronautLambdaHandler。但是在 Micronaut 指南上它说

您将与之交互的主要 API 是 AbstractMicronautLambdaRuntime。一个抽象类,您可以对其进行扩展以创建自定义运行时 mainClass。

所以我尝试创建自定义处理程序和运行时,基本上是复制现有的 MicronautLambdaHandlerMicronautLambdaRuntime

自定义 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 举报,一经查实,本站将立刻删除。