KivaKit和AWS Lambda的简单介绍

75 阅读1分钟

KivaKit和AWS Lambda

KivaKit 1.2增加了对AWS Lambda的无缝支持。用于REST和GRPC的Lambdas可以被添加到KivaKit微服务中,而不需要做任何改动(这将使这篇文章变得简短)。

创建一个Lambda

我们已经在微服务文章中看到了一个用于REST的KivaKit请求处理器。我们将简单地重复使用这段代码作为我们的Lambda请求处理程序。作为提醒,该文章中的代码看起来像这样:

@OpenApiIncludeType(description = "Request for divisive action")
public class DivisionRequest extends BaseMicroservletRequest
{
    @OpenApiIncludeType(description = "Response to a divide request")
    public class DivisionResponse extends BaseMicroservletResponse
    {
        @Tag(1)
        @Expose
        @OpenApiIncludeMember(description = "The result of dividing",
                              example = "42")
        int quotient;

        public DivisionResponse()
        {
            this.quotient = dividend / divisor;
        }

        public String toString()
        {
            return Integer.toString(quotient);
        }
    }

    @Tag(1)
    @Expose
    @OpenApiIncludeMember(description = "The number to be divided",
                          example = "84")
    private int dividend;

    @Tag(2)
    @Expose
    @OpenApiIncludeMember(description = "The number to divide the dividend by",
                          example = "2")
    private int divisor;

    public DivisionRequest(int dividend, int divisor)
    {
        this.dividend = dividend;
        this.divisor = divisor;
    }

    public DivisionRequest()
    {
    }

    @Override
    @OpenApiRequestHandler(summary = "Divides two numbers")
    public DivisionResponse onRequest()
    {
        return listenTo(new DivisionResponse());
    }

    @Override
    public Class<DivisionResponse> responseType()
    {
        return DivisionResponse.class;
    }

    @Override
    public Validator validator(ValidationType type)
    {
        return new BaseValidator()
        {
            @Override
            protected void onValidate()
            {
                problemIf(divisor == 0, "Cannot divide by zero");
            }
        };
    }
}

添加一个Lambda服务

与添加REST服务的方式类似,Lambda服务的添加方式是这样的:

public class DivisionMicroservice extends Microservice
{
    [...]

    @Override
    public MicroserviceLambdaService onNewLambdaService()
    {
        return new DivisionLambdaService(this);
    }
}

onNewLambdaService()方法返回DivisionLambdaService的一个实例,它扩展了MicroserviceLambdaService

public class DivisionLambdaService extends MicroserviceLambdaService
{
    [...]

    @Override
    public void onInitialize()
    {
        mount("division", "1.0", DivisionRequest.class);
    }
}

当服务被初始化时,对onInitialize()mount()方法的调用被用来将我们的lambda的名字和它的版本与处理程序DivisionRequest联系起来。其他的就不需要了。

代码

KivaKit微服务API,包括对AWS Lambda的支持,可在Maven Central的这些坐标上找到:

<dependency>
    <groupId>com.telenav.kivakit</groupId>
    <artifactId>kivakit-microservice</artifactId>
    <version>1.2.0</version>
</dependency>