簡體   English   中英

Spring Cloud 函數:如何將供應商映射到 Azure 函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM