@SpringBootApplication above has a function that can be
decorated at runtime by Spring Cloud Function to be an HTTP endpoint,
or a Stream processor, for instance with RabbitMQ, Apache Kafka or
@Beans can be
Supplier (all from
java.util), and their parametric types can be String or POJO. A
Function is exposed as a Spring Cloud Stream
spring-cloud-function-stream is on the classpath.
Consumer is also exposed as a Stream
Sink and a
Supplier translates to a Stream
HTTP endpoints are exposed if the Stream binder is
Functions can be of
Flux<Pojo> and Spring Cloud
Function takes care of converting the data to and from the desired
types, as long as it comes in as plain text or (in the case of the
POJO) JSON. TBD: support for
Flux<Message<Pojo>> and maybe plain
Pojo types (Fluxes implied and implemented by the framework).
Functions can be grouped together in a single application, or deployed one-per-jar. It’s up to the developer to choose. An app with multiple functions can be deployed multiple times in different "personalities", exposing different functions over different physical transports.