gpt4 book ai didi

java - Spring Cloud 函数: How to map a Supplier to Azure function

转载 作者:行者123 更新时间:2023-12-02 10:14:13 28 4
gpt4 key购买 nike

我正在尝试使用 Spring Cloud Function 2.0 将供应商 Bean 映射到 Azure 函数,但我需要扩展 AzureSpringBootRequestHandler,它似乎只支持具有输入参数和返回值的函数。 AzureSpringBootRequestHandler 类有两个类型参数:输入和输出,并且 AzureSpringBootRequestHandler.handleRequest() 也需要输入参数。

@Bean
public Supplier<List<String>> foo() {
return () -> Arrays.asList("foo1", "foo2");
}

/////

class FooFunction extends AzureSpringBootRequestHandler<Void, List<String>> {
@FunctionName("foo")
List<String> foo(@HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST},
authLevel = AuthorizationLevel.FUNCTION) HttpRequestMessage<Optional<String>> request,
ExecutionContext context) {
return handleRequest(null, context);
}
}

上面的代码会在reactor.core.publisher.FluxJust.(FluxJust.java:60)处导致NPE

将@Bean返回类型更改为Function<Void, List<String>>在 AzureSpringFunctionInitializer.lookup 中导致 IllegalStateException“没有使用 name=foo 定义的函数”

添加一个虚拟 int 参数是可行的。

P.S 理想情况下,我什至不需要返回值,因此我可以将其设为可运行,而不是供应商,但这似乎完全不受支持。

如有任何帮助,我们将不胜感激。

最佳答案

Spring Cloud Function 3.0.0 中添加了对供应商和消费者的支持。目前这仍然是一个里程碑。

更多信息this change .

我使用 Spring Cloud Function 2.x 解决了这个问题,方法是将 AzureSpringBootRequestHandler 的签名更改为使用Optional,如下所示:

public class SomeFunction extends AzureSpringBootRequestHandler<Optional<?>, List<Foo>> {

@FunctionName("some-function")
public List<Device> execute(@HttpTrigger(name = "req",
methods = {HttpMethod.GET},
authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Void> request,
ExecutionContext context) {
return handleRequest(Optional.empty(), context);
}
}

您还必须更改 Bean 的类型以匹配此内容:

@Bean(name="some-function")
public Function<Optional<?>, List<Device>> someFunction() {
return v -> fooService.bar();
}

关于java - Spring Cloud 函数: How to map a Supplier to Azure function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54788858/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com