We are pleased to announce the release of the Spring Cloud Stream Horsham (3.0.0.RELEASE) release train which is available as part of Spring Cloud Hoxton.RELEASE (imminent) and builds on Spring Boot 2.2.x and Spring Cloud Function 3.0.0.RELEASE which was also just released.

Spring Cloud Stream Horsham.RELEASE modules are available for use in the Maven Central repository.

Quick highlights:

As mentioned in these posts (demystified and simplified, functional and reactive, stream and spring Integration and event routing) preceding this announcement, the core theme of this release is functions!.

Historically, Spring Cloud Stream exposed annotation-based configuration model that required the user to be aware of and provide considerable amount of boilerplate information that could be otherwise easily inferred. You can read more details about it here, but with this release and subsequent release of Spring Cloud Functions that is no longer the case.

Stream app is just a boot app!

@SpringBootApplication
public class SampleApplication  {
    @Bean
    public Function<String, String> uppercase() {
        return value -> value.toUpperCase();
    }
}

Yes, the above is fully functional Spring Cloud Stream application

Notable features and enhancements:

Most of notable features and enhancements are to emphasise our commitment to functional programming model;

  • Routing Function - which effectively corresponds to equal functionality (and more) provided by condition attribute of @StreamListener annotation. See Event Routing for more details.

  • Multiple bindings with functions (multiple message handlers) - see Multiple functions in a single application for more details.

  • Function arity (functions with multiple inputs/outputs - single function that can subscribe or target multiple destinations) - see Functions with multiple input and output arguments for more details.

  • Native support for reactive programming - since v3.0.0 we no longer distribute spring-cloud-stream-reactive modules and instead relying on native reactive support provided by spring cloud function. For backward compatibility you can still bring spring-cloud-stream-reactive from previous versions.

  • Schema Registry module has been migrated to a stand alone project

For more information you should also checkout the updated user guide.

Functional support in Kafka Streams

Kafka Streams binder now supports a first class function based programming model using which you can now write your Kafka Streams applications based on java.util.function support. This further reduces the boilerplate code that the applications need to write and allow the developers to focus on the business logic at hand. For further details, please visit Functional Style section for more details. Soby Chako (the lead for Spring Cloud Stream Kafka binder) is planning to have a dedicated set of write ups going over all the new features.

As always, we welcome feedback and contributions, so please reach out to us on Stackoverflow or GitHub and or Gitter