如何在Java中为SNSEvent和S3Event使用多个LambdaFunctionHandler?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Java中为SNSEvent和S3Event使用多个LambdaFunctionHandler?相关的知识,希望对你有一定的参考价值。

我想从s3事件和sns事件触发Lambda函数。

当前版本是这样的:

public class LambdaFunctionHandler implements RequestHandler<S3Event, Object> {

  public Object handleRequest(S3Event input, Context context) {
    context.getLogger().log("S3Event: " + input);
    return null;
  }
}

有没有办法处理这两种事件类型?

答案

作为一种方法而不是使用S3Event类,您可以简单地使用Map并根据请求对象的视图决定做什么。

但更合适的方式如下。假设您有S3和SNS事件的通用逻辑,那么您正在使用这些请求中的一些公共属性。您可以创建自己的包含此公共属性的自定义基类,然后创建一个利用此基类的公共处理程序。另见:https://docs.aws.amazon.com/lambda/latest/dg/java-programming-model-req-resp.html

粗略地说它看起来像:

public class BaseCommonRequest {

     private String someCommonProperty1;

     // ...
} 

public class BaseLambdaFunctionHandler implements RequestHandler<BaseCommonRequest, Object> {

  public Object handleRequest(BaseCommonRequest input, Context context) {
    context.getLogger().log("event: " + input);
    return null;
  }
}
另一答案

正如official documentation所建议的那样,有低级别的处理程序。

public class Hello implements RequestStreamHandler{
    public static void handler(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
        int letter;
        while((letter = inputStream.read()) != -1)
        {
            outputStream.write(Character.toUpperCase(letter));
        }
    }
}

通过使用这些处理程序,我可以将请求转换为S3Event和SNSEvent。有一个示例代码here

以上是关于如何在Java中为SNSEvent和S3Event使用多个LambdaFunctionHandler?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 gRPC 中为 Java 手动生成客户端和服务器代码?

你如何在Java中为游戏加倍缓冲?

如何在jmeter中为java采样器请求生成多个登录用户

java - 如何在java printf中为数字符号保留符号?

如何在java中为数字和字母拆分String

如何在 JAVA 中为所有相似类型的 bean 编写通用代码