anchor.diff:  .Producers and Consumers
   image::{github-raw}/docs/src/main/asciidoc/images/producers-consumers.png[width=800,scaledwidth="75%",align="center"]
   
  -A producer is any component that sends messages to a channel.
  -The channel can be bound to an external message broker with a `Binder` implementation for that broker.
  -When invoking the `bindProducer()` method, the first parameter is the name of the destination within the broker, the second parameter is the local channel instance to which the producer sends messages, and the third parameter contains properties (such as a partition key expression) to be used within the adapter that is created for that channel.
  -
  -A consumer is any component that receives messages from a channel.
  +A producer is any component that sends messages to a binding destination.
  +The binding destination can be bound to an external message broker with a `Binder` implementation for that broker.
  +When invoking the `bindProducer()` method, the first parameter is the name of the destination within the broker, the second parameter is the instance if local destination to which the producer sends messages, and the third parameter contains properties (such as a partition key expression) to be used within the adapter that is created for that binding destination.
  +
  +A consumer is any component that receives messages from the binding destination.
   As with a producer, the consumer's channel can be bound to an external message broker.
   When invoking the `bindConsumer()` method, the first parameter is the destination name, and a second parameter provides the name of a logical group of consumers.
   Each group that is represented by consumer bindings for a given destination receives a copy of each message that a producer sends to that destination (that is, it follows normal publish-subscribe semantics).
  
positive.code: [source,java]
  ----
  public interface Binder<T, C extends ConsumerProperties, P extends ProducerProperties> {
      Binding<T> bindConsumer(String name, String group, T inboundBindTarget, C consumerProperties);
  
      Binding<T> bindProducer(String name, T outboundBindTarget, P producerProperties);
  }
  ----
  
  
negative.code: 
  Spring Cloud Stream models this behavior through the concept of a consumer group.
  (Spring Cloud Stream consumer groups are similar to and inspired by Kafka consumer groups.)
  Each consumer binding can use the `spring.cloud.stream.bindings.<bindingName>.group` property to specify a group name.
  For the consumers shown in the following figure, this property would be set as `spring.cloud.stream.bindings.<bindingName>.group=hdfsWrite` or `spring.cloud.stream.bindings.<bindingName>.group=average`.
  
  .Spring Cloud Stream Consumer Groups
  image::{github-raw}/docs/src/main/asciidoc/images/SCSt-groups.png[width=800,scaledwidth="75%",align="center"]
  