用于无效输出的 AWS Lambda RequestHandler

ttu*_*lka 8 java amazon-web-services aws-lambda aws-sdk-java-2.0

考虑一个用 Java 编写的简单 Lambda:

import com.amazonaws.services.lambda.runtime.Context; 
import com.amazonaws.services.lambda.runtime.RequestHandler;

public class Hello implements RequestHandler<Integer, String>{
    public String handleRequest(int myCount, Context context) {
        return String.valueOf(myCount);
    }
}
Run Code Online (Sandbox Code Playgroud)

处理程序接口被定义为RequestHandler<InputType, OutputType>,但是当我的 Lambda 对事件做出反应并且只是产生一些副作用时,输出类型是不必要的,我必须写这样的东西:

public class Hello implements RequestHandler<SNSEvent, Void>{
    public Void handleRequest(SNSEvent snsEvent, Context context) {
        ...
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

这很烦人。

是否有替代RequestHandlervoid处理程序?:

public class Hello implements EventHandler<SNSEvent>{
    public void handleEvent(SNSEvent snsEvent, Context context) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

Fer*_*yer 10

您不需要为 Lambda 入口点实现接口。您的处理程序类可以只是一个具有满足文档中说明的要求的签名的 POJO 。

例如:

package example;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.events.SNSEvent;

public class Hello {
  public void handleEvent(SNSEvent event, Context context) {
    // Process the event
  }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您应该将其example.Hello::handleEvent用作处理程序配置。

另请参阅官方文档中的此示例

package example;

import com.amazonaws.services.lambda.runtime.Context; 
import com.amazonaws.services.lambda.runtime.LambdaLogger;

public class Hello {
    public String myHandler(int myCount, Context context) {
        LambdaLogger logger = context.getLogger();
        logger.log("received : " + myCount);
        return String.valueOf(myCount);
    }
}
Run Code Online (Sandbox Code Playgroud)