Get ahead
VMware offers training and certification to turbo-charge your progress.
Learn moreWe are pleased to announce the first Release Candidate of the Spring Cloud Stream Fishtown release train - Fishtown.RC1/2.1.0.RC1.
Spring Cloud Stream Fishtown 2.1.0.RC1 is available for use in the Spring Milestone repository.
The following section provides a brief summary of features and improvements included in this release.
The main theme for this release is the introduction of a new programming model which uses Spring Cloud Function as an alternative for defining stream handlers and sources which can now be expressed as beans of
type java.util.function.[Supplier/Function/Consumer]
To specify which functional bean to bind to the external destination(s) exposed by the bindings, you must provide spring.cloud.stream.function.definition
property.
Here is the example of the Processor application exposing message handler as java.util.function.Function
@SpringBootApplication
@EnableBinding(Processor.class)
public class MyFunctionBootApp {
public static void main(String[] args) {
SpringApplication.run(MyFunctionBootApp.class,
"--spring.cloud.stream.function.definition=toUpperCase");
}
@Bean
public Function<String, String> toUpperCase() {
return s -> s.toUpperCase();
}
}
In the above you we simply define a bean of type java.util.function.Function
called toUpperCase and identify it as a bean to be used as message handler
whose input and output will be bound to the external destinations exposed by the Processor binding.
Using this programming model you can also benefit from functional composition where you can dynamically compose complex handlers from a set of simple functions. As an example add the following function bean to the application defined above
@Bean
public Function<String, String> wrapInQuotes() {
return s -> "\"" + s + "\"";
}
and modify the spring.cloud.stream.function.definition
property to reflect your intention to compose a new function from both toUpperCase and wrapInQuotes.
To do so Spring Cloud Function allows you to use |
(pipe) symbol. So to finish our example our property will now look like this:
--spring.cloud.stream.function.definition=toUpperCase|wrapInQuotes
Aside form changes and improvements in M1 and M2, here is the list of improvements for this release
Aside form changes and improvements in M1 and M2, here is the list of improvements for this release
Aside form changes and improvements in M1 and M2, here is the list of improvements for this release
As part of the continuing efforts to improve the code quality and to evaluate the framework components for its contract correctness, we have a new Acceptance Test project to bootstrap Spring Cloud Stream applications on Cloud Foundry and Kubernetes. These tests run multiple times in a day on a freshly repaved environment. We hope this provides a foundation for the community and customers to build more automation pipelines on target platforms.
With this release we also want to highlight the recently released Kinesis Binder
NOTE:
If the applications are created from Spring Initializr, they need to add this BOM snippet in maven dependency management before the spring-cloud BOM declaration, otherwise you'll end up with the latest snapshot (which may be ok since it would include all the work from M2):
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-dependencies</artifactId>
<version>Fishtown.RC1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
The RC2 is planned in few weeks and then Fishtown.RELEASE.
As always, we welcome feedback and contributions, so please reach out to us on Stackoverflow or GitHub or via Gitter.