Azure/azure-functions-java-library

Azure Function coded with spring-cloud-function-adapter-azure SDK cannot return value of form of Mono/Flux.

alain-marcel opened this issue · 4 comments

We are using the spring-cloud-function-adapter-azure SDK to build our function.
We expect the return value to be in the form of Mono and Flux, but the we cannot return the corresponding value.

The code link provided by the official website: Getting started with Spring Cloud Function in Azure | Microsoft Docs
After checking the code provided by the official website, we found that only the return value in the HTTP response format was provided as follows:

public class HelloHandler extends FunctionInvoker<User, Greeting> {
   
    @FunctionName("hello")
    public HttpResponseMessage execute(
        @HttpTrigger(name = "request", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<User>> request,
        ExecutionContext context) {
        User user = request.getBody()
                           .filter((u -> u.getName() != null))
                           .orElseGet(() -> new User(
                               request.getQueryParameters()
                                      .getOrDefault("name", "world")));
        context.getLogger().info("Greeting user name: " + user.getName());
        return request
            .createResponseBuilder(HttpStatus.OK)
            .body(handleRequest(user, context))
            .header("Content-Type", "application/json")
            .build();
    }}

I did not find the return form of Mono and Flux. The return format that we wanted is as follows:

public class HelloHandler extends FunctionInvoker<User, Mono<Greeting>> {

    @FunctionName("hello")
    public HttpResponseMessage execute(
        @HttpTrigger(name = "request", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<User>> request,
        ExecutionContext context) {
          // ...
}

We want to know whether the return of Mono and Flux is supported on Azure, because the customer found that .NET can return the corresponding value, as follows:

[FunctionName("Httpxample")]
public static async Task<IActionResult> Run(
   [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HtppREquest req,
   Iloogger log
   )

Please confirm the feasibility of this request. Thank you very much for your help.

Hi @alain-marcel , thanks for reaching out and sorry for the late reply. Did you still have this issue?

Hi @alain-marcel , I am investigating the possible solution for non-blocking/reactive invocation, I am trying to understand how .NET is supporting this. It will be great if you can share any docs on .NET about this feature.

Attach the sample issue from the java worker repo: Azure/azure-functions-java-worker#244