GH-692 Fix reactive support in Azure FunctionInvoker

Resolves #692
This commit is contained in:
Oleg Zhurakousky
2021-05-25 17:25:06 +02:00
parent 1e6bac470c
commit 7e5eaeeb49
6 changed files with 102 additions and 13 deletions

View File

@@ -37,6 +37,9 @@ $ http POST localhost:7071/api/uppercase greeting=hello name='your name'
The same is for `echo` function, however it will take any input since all it does is just echos it back.
There is also a reactive version of 'uppercase' - `uppercaseReactive` which will produce the same result, but
demonstrates and validates the ability to use reactive functions with Azure.
To run locally on top of Azure Functions, and to deploy to your live Azure environment, you will need the Azure Functions Core Tools installed along with the Azure CLI (see https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-first-java-maven for more details).
To deploy the function to your live Azure environment, including an automatic provisioning of an HTTPTrigger for the function:

View File

@@ -54,7 +54,7 @@
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-function-dependencies</artifactId>
<version>3.1.2-SNAPSHOT</version>
<version>3.1.3-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>

View File

@@ -27,6 +27,8 @@ import org.springframework.messaging.Message;
import com.microsoft.azure.functions.ExecutionContext;
import reactor.core.publisher.Mono;
@SpringBootApplication
public class Config {
@@ -65,5 +67,13 @@ public class Config {
};
}
@Bean
public Function<Mono<String>, Mono<String>> uppercaseReactive() {
return mono -> mono.map(value -> {
return value.toUpperCase();
});
}
}

View File

@@ -0,0 +1,42 @@
/*
* Copyright 2012-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package example;
import com.microsoft.azure.functions.ExecutionContext;
import com.microsoft.azure.functions.HttpMethod;
import com.microsoft.azure.functions.HttpRequestMessage;
import com.microsoft.azure.functions.annotation.AuthorizationLevel;
import com.microsoft.azure.functions.annotation.FunctionName;
import com.microsoft.azure.functions.annotation.HttpTrigger;
import java.util.Optional;
import org.springframework.cloud.function.adapter.azure.FunctionInvoker;
/**
* @author Oleg Zhurakousky
*/
public class ReactiveUppercaseHandler extends FunctionInvoker<String, String> {
@FunctionName("uppercaseReactive")
public String execute(@HttpTrigger(name = "req", methods = {HttpMethod.GET,
HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
ExecutionContext context) {
return handleRequest(request.getBody().get(), context);
}
}