support function composition for web and stream

This commit is contained in:
markfisher
2016-10-01 16:52:59 -04:00
parent b78024e7ea
commit 8e5d631db9
3 changed files with 28 additions and 5 deletions

View File

@@ -16,6 +16,8 @@
package org.springframework.cloud.function.stream;
import java.util.function.Function;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cloud.function.invoker.AbstractFunctionInvoker;
@@ -24,6 +26,9 @@ import org.springframework.cloud.function.registry.FunctionRegistry;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.messaging.Processor;
import org.springframework.context.annotation.Bean;
import org.springframework.util.StringUtils;
import reactor.core.publisher.Flux;
/**
* @author Mark Fisher
@@ -41,7 +46,11 @@ public class StreamConfiguration {
}
@Bean
public AbstractFunctionInvoker<?,?> invoker() {
return new StreamListeningFunctionInvoker(registry().lookup(properties.getName()));
public AbstractFunctionInvoker<?,?> invoker(FunctionRegistry registry) {
String name = properties.getName();
Function<Flux<Object>, Flux<Object>> function = (name.indexOf(',') == -1)
? registry.lookup(name)
: registry.compose(StringUtils.commaDelimitedListToStringArray(name));
return new StreamListeningFunctionInvoker(function);
}
}