在 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()
。
我正在尝试使用以下代码创建一个 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()
。