diff --git a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/function/FunctionConfiguration.java b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/function/FunctionConfiguration.java index a4ad6f606..a4a544e60 100644 --- a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/function/FunctionConfiguration.java +++ b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/function/FunctionConfiguration.java @@ -415,7 +415,7 @@ public class FunctionConfiguration { ? ((BindableFunctionProxyFactory) bindableProxyFactory).getOutputName(0) : (FunctionTypeUtils.isConsumer(functionType) ? null : "output"); - if (FunctionTypeUtils.isReactive(FunctionTypeUtils.getInputType(functionType, 0))) { + if (FunctionTypeUtils.isReactive(FunctionTypeUtils.getInputType(functionType, 0)) && StringUtils.hasText(outputChannelName)) { MessageChannel outputChannel = context.getBean(outputChannelName, MessageChannel.class); SubscribableChannel subscribeChannel = (SubscribableChannel) inputChannel; Publisher publisher = this.enhancePublisher(MessageChannelReactiveUtils.toPublisher(subscribeChannel), diff --git a/spring-cloud-stream/src/test/java/org/springframework/cloud/stream/function/ImplicitFunctionBindingTests.java b/spring-cloud-stream/src/test/java/org/springframework/cloud/stream/function/ImplicitFunctionBindingTests.java index 19179e44d..c9a364da1 100644 --- a/spring-cloud-stream/src/test/java/org/springframework/cloud/stream/function/ImplicitFunctionBindingTests.java +++ b/spring-cloud-stream/src/test/java/org/springframework/cloud/stream/function/ImplicitFunctionBindingTests.java @@ -167,6 +167,25 @@ public class ImplicitFunctionBindingTests { } } + @Test + public void testReactiveConsumerWithoutDefinitionProperty() { + System.clearProperty("spring.cloud.stream.function.definition"); + try (ConfigurableApplicationContext context = new SpringApplicationBuilder( + TestChannelBinderConfiguration.getCompleteConfiguration( + SingleReactiveConsumerConfiguration.class)) + .web(WebApplicationType.NONE) + .run("--spring.jmx.enabled=false")) { + + InputDestination inputDestination = context.getBean(InputDestination.class); + Message inputMessage = MessageBuilder + .withPayload("Hello".getBytes()).build(); + inputDestination.send(inputMessage); + + assertThat(System.getProperty("consumer")).isEqualTo("Hello"); + System.clearProperty("consumer"); + } + } + @Test public void testConsumer() { try (ConfigurableApplicationContext context = new SpringApplicationBuilder( @@ -396,6 +415,18 @@ public class ImplicitFunctionBindingTests { } } + @EnableAutoConfiguration + public static class SingleReactiveConsumerConfiguration { + + @Bean + public Consumer> consumer() { + return flux -> flux.subscribe(value -> { + System.out.println(value); + System.setProperty("consumer", value); + }); + } + } + @EnableAutoConfiguration public static class ReactiveFunctionConfiguration {