为避免 AWS Lambda 函数执行期间发生会话重叠问题,我们可以使用 ThreadLocal 对象来存储变量。ThreadLocal 对象中存储的变量只能被当前线程访问,从而避免了不同请求之间的冲突。
示例代码:
import java.util.concurrent.atomic.AtomicInteger;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.events.SQSEvent;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.GetObjectRequest;
import software.amazon.awssdk.services.s3.model.GetObjectResponse;
public class MyHandler implements RequestHandler {
private static final ThreadLocal COUNT = ThreadLocal.withInitial(() -> new AtomicInteger(0));
public Void handleRequest(SQSEvent event, Context context) {
LambdaLogger logger = context.getLogger();
COUNT.get().incrementAndGet();
logger.log("Request count: " + COUNT.get().get());
// do some work
// ...
return null;
}
}