在 lambda 中返回 Mono/Flux

Returning a Mono/Flux in the lambda

我正在尝试使用以下代码创建一个 lambda。在这里,我调用了一个 API(API 网关),它又调用 Second Lambda returns "Second Lambda" 但是,当我测试它,它给出以下输出 lambda 不支持在 handler() 中输入 return 类型的反应类型吗?有什么方法可以 return 实际值而不使用阻塞调用 block()?

public class FirstLambda implements RequestHandler<Object, Mono<String>> {

    public Mono<String> handleRequest(final Object input, final Context context) {
        String output=null;

        Mono<String> m= WebClient.
                create()
                .get()
                .uri("https://api.amazonaws.com/dev")
                .retrieve()
                .bodyToMono(String.class);

        m.subscribe(x-> System.out.println("inside the mono "+x.toString()));
        System.out.println("Exiting the block");

      
        return m;
    }
}

输出

{
  "scanAvailable": true
}

预期输出

Second Lambda

第二个拉姆达

public class SecondLambda implements RequestHandler<Object, String> {
    public String handleRequest(final Object input, final Context context) {
        return "Second Lambda";
    }
}

However, when I test it, it's giving below output

那是因为在 returning 之前您没有等待 Mono 完成,并且由于 RequestHandler 不提供对反应类型的特殊支持,所以它不会等待要么。

Doesn't lambda support reactive types as return type in the handler()?

Reactive return 类型在这里不受您期望的支持 - 但在这种情况下也没有理由使用它们。反应式框架的主要目的是为许多非阻塞请求使用少量线程 - 但在此设置中,每个请求您的 lambda 将 运行 一次(当通过 API 端点调用时 API网关),所以没有任何优势。

当然您仍然可以使用 WebClient,但在这种情况下,唯一明智的做法是在 WebClient 结果上调用 block()