Files
spring-cloud-stream/index.html
2018-10-29 10:34:24 -07:00

141 lines
5.5 KiB
HTML

---
# The name of your project
title: Spring Cloud Stream
badges:
# Specify your project's twitter handle, if any. Delete if none.
twitter: SpringCloudOSS
# Customize your project's badges. Delete any entries that do not apply.
custom:
- name: Source (GitHub)
url: https://github.com/spring-cloud/spring-cloud-stream
icon: github
- name: Issues (Waffle)
url: https://waffle.io/spring-cloud/spring-cloud-stream
icon: tracking
- name: CI (Jenkins)
url: https://jenkins.spring.io/view/SpringCloudStream/view/CI/
icon: ci
- name: StackOverflow
url: http://stackoverflow.com/questions/tagged/spring-cloud-stream
icon: stackoverflow
---
<!DOCTYPE HTML>
<html lang="en-US">
<!-- Specify the parent of this project (or delete if none) to influence the rendering of the breadcrumb -->
{% capture parent_link %}
[Spring Cloud]({{ site.projects_site_url }}/spring-cloud)
{% endcapture %}
{% capture billboard_description %}
Spring Cloud Stream is a framework for building highly scalable event-driven microservices connected with shared messaging systems.
<br >
The framework provides flexible programming model built on already established and familiar Spring idioms and best practices, including support
for persistent pub/sub semantics, consumer groups, and stateful partitions.
{% endcapture %}
{% capture main_content %}
The core building blocks of Spring Cloud Stream are:
* *Destination Binders*: Components responsible to provide integration with the external messaging systems.
* *Destination Bindings*: Bridge between the external messaging systems and application provided Producers and Consumers of messages (created by the Destination Binders).
* *Message*: The canonical data structure used by producers and consumers to communicate with Destination Binders (and thus other applications via external messaging systems).
<img class="styled-image" src="img/SCSt-overview.png" alt="Spring Cloud Stream overview" title="Spring Cloud Stream overview" border="5"/>
## Binder Implementations
Spring Cloud Stream supports a variety of binder implementations and the following table includes the link to the GitHub projects.
|[RabbitMQ](https://github.com/spring-cloud/spring-cloud-stream-binder-rabbit)|
|[Apache Kafka](https://github.com/spring-cloud/spring-cloud-stream-binder-kafka)|
|[Amazon Kinesis](https://github.com/spring-cloud/spring-cloud-stream-binder-aws-kinesis)|
|[Google PubSub _(partner maintained)_](https://github.com/spring-cloud/spring-cloud-gcp/tree/master/spring-cloud-gcp-pubsub-stream-binder)|
|[Solace PubSub+ _(partner maintained)_](https://github.com/SolaceProducts/spring-cloud-stream-binder-solace)|
|[Azure Event Hubs _(partner maintained)_](https://github.com/Microsoft/spring-cloud-azure/tree/master/spring-cloud-azure-eventhub-stream-binder)|
<span id="quick-start"></span>
## Quick Start
<script type="text/javascript">{% include custom.js %}</script>
{% include download_widget.md %}
As long as Spring Cloud Stream and a Spring Cloud Stream Binder dependencies are on the classpath any Spring Boot application with `@EnableBinding` binds to the external
messaging system (e.g. [Rabbit MQ](https://github.com/spring-cloud/spring-cloud-stream-binder-rabbit) or [Apache Kafka](https://github.com/spring-cloud/spring-cloud-stream-binder-kafka),
depending on the binder-implementation of choice).
For more comprehansive step-by-step _getting started_ experience please refer to the
[Quick Start](https://docs.spring.io/spring-cloud-stream/docs/Elmhurst.RELEASE/reference/htmlsingle/#_quick_start) section of the user guide.
Below is the fully functional Spring Cloud Stream application, which receives and logs data to the console.
```java
@SpringBootApplication
@EnableBinding(Sink.class)
public class LoggingConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(LoggingConsumerApplication.class, args);
}
@StreamListener(Sink.INPUT)
public void handle(Person person) {
System.out.println("Received: " + person);
}
public static class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return this.name;
}
}
}
```
As you can see from the preceding example:
* We've enabled `Sink` binding (input-no-output) by using `@EnableBinding(Sink.class)`. Doing so signals to the framework to initiate binding to the messaging system,
where it automatically creates the destination (that is, queue, topic, and others) that are bound to the `Sink.INPUT` channel.
* We've added a handler method to receive incoming messages of type `Person`. Doing so lets you see one of the core features of the framework: It tries to automatically convert incoming message
payloads to type `Person`.
You can start the application by simply running its `main(..)` method.
### Apache Kafka Client Compatibility
Spring Cloud Stream supports a variety of Apache Kafka Client releases. To learn more about it, please refer to the [Apache Kafka Client Compatibility](https://github.com/spring-cloud/spring-cloud-stream/wiki/Kafka-Client-Compatibility) section in the Wiki page.
{% endcapture %}
{% capture related_resources %}
### Sample Projects
* [Spring Cloud Stream Samples](https://github.com/spring-cloud/spring-cloud-stream-samples)
### Related Projects
* [Spring Cloud Stream Applications](http://cloud.spring.io/spring-cloud-stream-app-starters/)
* [Spring Cloud Data Flow](http://cloud.spring.io/spring-cloud-dataflow/)
{% endcapture %}
{% include project_page.html %}
</html>