Spring Team
Oleg Zhurakousky

Oleg Zhurakousky

Software Engineer

Saint-Saturnin-les-Apt, France

Open source practitioner with over 17 years of experience in software engineering across multiple disciplines including software architecture and design, consulting, business analysis and application development. Speaker who presented seminars at dozens of conferences worldwide (i.e. SpringOne, JavaZone, Hadoop Summit,, JavaOne, Scala Days, Oredev etc.)
Blog Posts by Oleg Zhurakousky

Spring Cloud Stream - functional and reactive

In the previous post, I tried to provide justification for our shift to a functional programming model in Spring Cloud Stream (SCSt). It’s less code, less configuration. Most importantly, though, your code is completely decoupled and independent from the internals of SCSt.

In this post, I’ll dig a little deeper and summarize the core features of our functional support, specifically around its reactive features.

IMPORTANT: Anything you can do with @StreamListener/@EnableBinding you can also do without it. In other words, the functional support is now feature-compatible with the annotation-based support.

Read more...

Spring Cloud Stream - demystified and simplified

This is the first post in a series of blog posts meant to clarify and preview what’s coming in the upcoming releases of spring-cloud-stream and spring-cloud-function (both 3.0.0).

Recently, I had a discussion with a user and heard something that prompted me to begin a series of blog posts (starting with this one) with the goal of both demystifying the true goals of Spring Cloud Stream and Spring Cloud Function projects as well as demonstrating their new features.

Spring Integration Wrapper?

The specific phrase that prompted all this was - "Spring Cloud Stream, being a light Spring Integration input/output router…”. That’s an interesting perception, but I have to disagree. While it may have been inspired by Enterprise Integration Patterns (EIP) and builds on top of Spring Integration (SI), that last part is really just an implementation detail. Spring Cloud Stream (SCSt) as a framework was never about “being a light Spring Integration input/output router”. In fact, this statement shows part of the problem, where SI (the framework of choice to support some of the internal requirements of SCSt) was somehow perceived to be the core of SCSt in such way that many perceive SCSt to be an extension or a wrapper to SI. It is not. It has always been about pure microservices and binding them to sources and targets of data (i.e., messaging systems) . Simple as that.
If you abstract yourself far enough from knowing the internals of SCSt, you quickly realize that it is really a binding and activation framework. It binds a piece of code (provided by the user) to source/target of data exposed by the binder and activates such code according to binder implementation (for example, message arrival and so on). That is pretty much it.

Read more...

Announcing Spring Cloud Stream Horsham.M3 (3.0.0.M3)

We are pleased to announce the third Milestone of the Spring Cloud Stream Horsham.M3 (3.0.0.M3).

NOTE: Spring Cloud Stream 3.0.0.M1/M2 was primarily to establish compatibility with Spring Boot 2.2.x. and therefore went unannounced.

Spring Cloud Stream Horsham.M3 (3.0.0.M3) modules are available for use in the Spring Milestone repository.

Quick highlights:

  • Spring Boot 2.2.x
  • Spring Cloud Function 3.0.0.M2

Notable features and enhancements for this milestone:

Emphasis on functional programming model

While we’re not (yet) deprecating @StreamListener and/or @EnableBinding, we are moving toward a simpler and more natural auto-configuration driven programming model.

Read more...

Announcing Spring Cloud Function 3.0.0.M2

We are pleased to announce the second Milestone of the Spring Cloud Function 3.0.0.M2.

NOTE: Spring Cloud Function 3.0.0.M1 was primarily to establish compatibility with Spring Boot 2.2.x. and therefore went unannounced.

Spring Cloud Function 3.0.0.M2 modules are available for use in the Spring Milestone repository.

Quick highlights:

  • Spring Boot 2.2.x
  • Enhanced deployer (requires a separate blog)

Notable features and enhancements:

Function arity (multiple inputs/outputs)

One of the biggest features introduced with this milestone is support for functions with multiple inputs and outputs. Important thing to point out is that this feature only makes sense in reactive world where you may want to pass several streams to a function for purposes of doing some type of aggregate/merge operation on such streams. For conventional cases you can always send multiple arguments using a Collection of some type.

Read more...

Spring Cloud Stream Germantown.M1 /2.2.0.M1 Release Announcement

We are pleased to announce the first Milestone of the Spring Cloud Stream Germantown release train - Germantown.M1/2.2.0.M1.

Spring Cloud Stream Germantown 2.2.0.M1 is available for use in the Spring Milestone repository.

Some of the highlights:

Improved Home page and User Documentation

Please check out our new home page and user guide

Further functional programming enhancements

We’ve added additional functional programming enhancements and simplifications where you no longer required to provide @EnableBinding annotation and in some cases you may not need spring.cloud.stream.definition` property. Consider the following:

Read more...

Announcing the first milestone of Spring Cloud Function - 2.1.0.M1

We are pleased to announce first milestone of the Spring Cloud Function - 2.1.0.M1.

Individual modules of Spring Cloud Function 2.1.0.M1 are available for use in the Spring Milestone repository.
This release encompasses the following:

  • Some of the features that has always been available in bean factory based function catalog are now part of the functional form (see Dave Syer’s blog for more details on functional form) :
    • Multiple endpoint support - ability to map multiple HTTP endpoints the same way one would expect in conventional context configuration.
    • Function composition - ability to compose function (e.g., foo|bar or foo,bar).
  • Ability to communicate and retain meta-information via Message headers for cases where Message function is composed with non-Message (e.g., Function<Message<?>>, Message<?>> is composed with Function<?, ?>).
  • Support for implicit function composition where catalog.lookup(""), catalog.lookup("|"), catalog.lookup("foo|") or catalog.lookup("|bar") are all valid lookups providing container with enough information to determine your intentions. For example, empty string simply implies there is only one Function in catalog and no explicit name should be provided.
  • Creating Supplier from remote HTTP endpoint where one can define the sink url (destination) and the source url (source) and use the app as a pipeline for events from/to HTTP.
  • AWS Custom Runtime feature.
  • Other minor enhancements and bug-fixes.
Read more...

Announcing General Availability of Spring Cloud Stream - Fishtown.RELEASE (2.1.0.RELEASE)

After an exciting journey, we are pleased to announce the General Availability release of the Spring Cloud Stream Fishtown release train - Fishtown.RELEASE/2.1.0.RELEASE.

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream-dependencies</artifactId>
            <version>Fishtown.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
Read more...

Announcing General Availability of Spring Cloud Function - 2.0.0.RELEASE

We are pleased to announce general availability of the Spring Cloud Function - 2.0.0.RELEASE.

Individual modules of Spring Cloud Function 2.0.0.RELEASE are available for use in the Spring Release repository as well as Maven Central repository.

This release encompasses the following:

Read more...

Spring Cloud Stream Fishtown.RC2 /2.1.0.RC2 Release Announcement

We are pleased to announce the second Release Candidate of the Spring Cloud Stream Fishtown release train - Fishtown.RC2/2.1.0.RC2.

Spring Cloud Stream Fishtown 2.1.0.RC2 is available for use in the Spring Milestone repository.

As a follow up to 2.0.0.RC2, this release primarily encompasses minor enhancements and bug fixes.
As it stands now this should be the final Release Candidate before General Availability release 2.0.0.RELEASE in several weeks.

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:

<dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-stream-dependencies</artifactId>
           <version>Fishtown.RC2</version>
           <type>pom</type>
           <scope>import</scope>
</dependency>
Read more...

Announcing Spring Cloud Function - 2.0.0.RC2

We are pleased to announce the second Release Candidate of the Spring Cloud Function - 2.0.0.RC2.

Individual modules of Spring Cloud Function 2.0.0.RC2 are available for use in the Spring Milestone repository.

As a follow up to 2.0.0.RC1, this release primarily encompasses minor enhancements and bug fixes.
As it stands now this should be the final Release Candidate before General Availability release 2.0.0.RELEASE in several weeks.

How can you help?

If you’re interested in helping out, check out the “ideal for contribution” tag in the issue repository. If you have general questions, please ask on stackoverflow.com using the spring-cloud-function tag.

Read more...