[英]Spring Cloud Function: How to map a Supplier to Azure function
我正在嘗試使用 Spring Cloud Function 2.0 將供應商 Bean 映射到 Azure 函數,但我需要擴展 AzureSpringBootRequestHandler,它似乎只支持具有輸入參數和返回值的函數。 class 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“No function defined with name=foo”
添加虛擬 int 參數有效。
PS 理想情況下,我什至不需要返回值,因此我將其設為 Runnable 而不是供應商,但這似乎完全不受支持。
任何幫助,將不勝感激。
Spring Cloud Function 3.0.0 中添加了對供應商和消費者的支持。 目前,這仍然是一個里程碑。
更多信息此更改。
我使用 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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.