0
votes

I trying to use Spring Cloud Stream with functions as that described in this topic. But it does not work.

My function:

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }

    @Bean
    public Consumer<String> consumer() {
        return s -> System.out.println(s);
    }
}

And I push message. to the consumer-in-0 channel via producer that made with @Output annotation:

pulic interface Source {
    @Output("source")
    MessageChannel producer();
}

source.producer().send(MessageBuilder.withPayload("Hello").build());

My yaml channels configuration:

spring:
    cloud:
        function:
            definition: consumer
        stream:
            bindings:
                source:
                    destination: consumer-in-0

If I use consumer via @Input configuration - everything ok. Also in rabbitmq manager I see that producer is working and sending messages, but consumer does not consuming them. Help me please somebody.

P.S. I also use Spring WebFlux

1

1 Answers

3
votes

You cannot mix EnableBinding and functional model in the same application. If you are putting both producer and consumer in the same application, you might want to convert your producer using a Supplier. For e.g.

@Bean
public Supplier<String> supplier() {
  return () -> MessageBuilder.withPayload("Hello").build();

}

Then,

spring:
    cloud:
        function:
            definition: supplier;consumer
        stream:
            bindings:
                supplier-out-0:
                    destination: consumer-in-0