How spring-cloud/spring-cloud-stream works
Spring Cloud Stream is a framework for message-driven applications that connects application functions to broker destinations through configurable binders. The principal channel-based workflow resolves binding settings, selects a binder, and creates producer or consumer bindings to a broker; Kafka Streams provides a distinct native-streams path. The repository also includes schema-registry services and an Avro client. README claims establish the supported binder capabilities; source excerpts confirm core binding, lifecycle, Kafka Streams query, and schema operations, but do not expose every binder’s internal call wiring.
Main entry points: BindingService.java Binding service · KafkaMessageChannelBinder.java Kafka binder · RabbitMessageChannelBinder.java Rabbit binder · PulsarMessageChannelBinder.java Pulsar binder
Components 25
Binding core
- Binding settings
core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/BindingServiceProperties.java - Binding service
core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binding/BindingService.java - Binder factory
core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/BinderFactory.java - Binding lifecycle
core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binding/BindingsLifecycleController.java - Partition routing
core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/PartitionHandler.java
Channel binders
- Kafka binder
binders/kafka-binder/spring-cloud-stream-binder-kafka/src/main/java/org/springframework/cloud/stream/binder/kafka/KafkaMessageChannelBinder.java - Kafka provisioning
binders/kafka-binder/spring-cloud-stream-binder-kafka-core/src/main/java/org/springframework/cloud/stream/binder/kafka/provisioning/KafkaTopicProvisioner.java - Rabbit binder
binders/rabbit-binder/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/RabbitMessageChannelBinder.java - Rabbit provisioning
binders/rabbit-binder/spring-cloud-stream-binder-rabbit-core/src/main/java/org/springframework/cloud/stream/binder/rabbit/provisioning/RabbitExchangeQueueProvisioner.java - Pulsar binder
binders/pulsar-binder/spring-cloud-stream-binder-pulsar/src/main/java/org/springframework/cloud/stream/binder/pulsar/PulsarMessageChannelBinder.java - Pulsar provisioning
binders/pulsar-binder/spring-cloud-stream-binder-pulsar/src/main/java/org/springframework/cloud/stream/binder/pulsar/provisioning/PulsarTopicProvisioner.java
Kafka Streams
- Kafka Streams binder
binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/main/java/org/springframework/cloud/stream/binder/kafka/streams/KStreamBinder.java - Function processor
binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/main/java/org/springframework/cloud/stream/binder/kafka/streams/KafkaStreamsFunctionProcessor.java - Streams manager
binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/main/java/org/springframework/cloud/stream/binder/kafka/streams/StreamsBuilderFactoryManager.java - Streams registry
binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/main/java/org/springframework/cloud/stream/binder/kafka/streams/KafkaStreamsRegistry.java - Interactive queries
binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/main/java/org/springframework/cloud/stream/binder/kafka/streams/InteractiveQueryService.java
Schema registry
- Schema server
schema-registry/spring-cloud-stream-schema-registry-core/src/main/java/org/springframework/cloud/stream/schema/registry/controllers/ServerController.java - Schema repository
schema-registry/spring-cloud-stream-schema-registry-core/src/main/java/org/springframework/cloud/stream/schema/registry/controllers/ServerController.java - Registry client
schema-registry/spring-cloud-stream-schema-registry-client/src/main/java/org/springframework/cloud/stream/schema/registry/client/CachingRegistryClient.java - Schema cache
schema-registry/spring-cloud-stream-schema-registry-client/src/main/java/org/springframework/cloud/stream/schema/registry/client/CachingRegistryClient.java - Avro serialization
schema-registry/spring-cloud-stream-schema-registry-client/src/main/java/org/springframework/cloud/stream/schema/registry/avro/AvroSchemaServiceManagerImpl.java
Other components
- Stream application
- Message broker
- Kafka cluster
- Schema consumer
Connections 28
- Stream application → Binding settings: supplies configuration
- Binding service → Binding settings: reads properties
- Stream application → Binding lifecycle: defines bindings
- Binding lifecycle → Binding service: starts bindings
- Binding service → Binder factory: selects binder
- Binding service → Kafka binder: creates binding
- Binding service → Rabbit binder: creates binding
- Binding service → Pulsar binder: creates binding
- Partition routing → Kafka binder: selects partition
- Kafka binder → Kafka provisioning: provisions destinations
- Rabbit binder → Rabbit provisioning: provisions destinations
- Pulsar binder → Pulsar provisioning: provisions destinations
- Kafka binder → Message broker: sends and receives
- Rabbit binder → Message broker: sends and receives
- Pulsar binder → Message broker: sends and receives
- Stream application → Kafka Streams binder: declares stream bindings
- Kafka Streams binder → Function processor: binds native functions
- Streams manager → Streams registry: registers streams
- Kafka Streams binder → Streams manager: starts topology
- Function processor → Kafka cluster: processes streams
- Interactive queries → Streams registry: queries instances
- Interactive queries → Kafka cluster: queries stores
- Schema consumer → Registry client: registers or fetches
- Registry client → Schema server: delegates registry calls
- Registry client → Schema cache: caches schemas
- Schema server → Schema repository: reads and writes schemas
- Schema server → Schema repository: validates then persists
- Avro serialization → Schema consumer: encodes and decodes Avro