Dagger 和多个 AWS Lambda

问题描述 投票:0回答:1

我正在尝试使用 Java + Dagger 创建一些基本的 lambda 来处理 API 网关请求。

我正在尝试使用 Dagger 注入不同函数所需的 AWS 客户端,但正在努力获取实际的 lambda 调用来调用默认构造函数。

我有

@Singleton
@Component(modules = {HandlerCommonModule.class})
public interface LambdaHandlers {

    CreateRecord createRecord();

    DeleteRecord DeleteRecord();

}

@Module
public class HandlerCommonModule {

    @Provides
    @Singleton
    public static DynamoDbClient dynamoDbClient() {
        return DynamoDbClient.builder().build();
    }

}

然后处理程序类之一看起来像

public class CreateRecord extends BaseHandler {
    private static final Logger log = LogManager.getLogger(CreateRecord.class);

    @NonNull
    DynamoDbClient dynamoDbClient;


    @Inject
    public CreateRecord(final DynamoDbClient dynamoDbClient) {
        this.dynamoDbClient = dynamoDbClient;
    }


    @Override
    public BaseResponse process(BaseRequest request, Context context) {
        log.info("...");
    }
}

它正在扩展一个基本处理程序,我希望最终能够解开 API 网关请求,并将请求特定形状传递给处理程序(相应的 CreateRecordRequest 和 DeleteRecordRequest)

public abstract class BaseHandler implements RequestHandler<BaseRequest, BaseResponse> {
    private static final Logger LOGGER = LogManager.getLogger(BaseHandler.class);

    protected abstract BaseResponse process(BaseRequest request, Context context);

    @Override
    public final BaseResponse handleRequest(BaseRequest request, Context context) {
        try {
            return process(request, context);
        } catch (Exception e) {
            LOGGER.debug("Exception: {e}", e);
        }
        return defaultErrorResponse();
    }

    protected BaseResponse defaultErrorResponse() {
        return BaseResponse.builder()
                .statusCode(503)
                .body("Service unavailable. Try again later.")
                .build();
    }
}

Lambda 声称类没有无参数构造函数,这是事实。查看类构建,我发现 Dagger 在 LambdaHandlers 中创建,但我不确定如何使用它或需要更改哪些内容来创建 aws lambda 可以使用的默认构造函数。到目前为止,我发现的所有示例似乎都相当微不足道,或者假设只有一个 lambda。我正在尝试创建多个 API,并希望根据需要重用一些逻辑/注入一些 AWS 客户端。提前谢谢!

aws-lambda dagger-2 dagger
1个回答
0
投票

所以,上面的模式似乎是正确的。

就我而言,我的问题是由 lambda 代码版本与 lambda 正在执行的内容引起的。哎呀!

清理所有资源并重新部署并全面实施,效果符合预期。

© www.soinside.com 2019 - 2024. All rights reserved.