GH-916: MC Binder Producer Error Infrastructure

Initial Commit for GH-916.

- register a pubsub error channel.
- register and subscribe a bridge handler to bridge it to the global error channel.
- pass the error channel to the implementation so it can wire it into the outbound endpoint.
- destroy the infrastructure when unbinding.

Javadoc Polishing

Add test case.

temp update to SI 4.3.12

GH-802 - Error Handling Documentation

Resolves #802
This commit is contained in:
Gary Russell
2017-08-15 17:11:40 -04:00
committed by Vinicius Carvalho
parent 3ca2138a32
commit 0eab8a5fa7
5 changed files with 152 additions and 9 deletions

View File

@@ -447,7 +447,23 @@ Spring Cloud Stream supports publishing error messages received by the Spring In
error channel. Error messages sent to the `errorChannel` can be published to a specific destination
at the broker by configuring a binding for the outbound target named `error`. For example, to
publish error messages to a broker destination named "myErrors", provide the following property:
`spring.cloud.stream.bindings.error.destination=myErrors`
`spring.cloud.stream.bindings.error.destination=myErrors`.
[[binder-error-channels]]
===== Message Channel Binders and Error Channels
Starting with _version 1.3_, some `MessageChannel` - based binders publish errors to a discrete error channel for each destination.
In addition, these error channels are bridged to the global Spring Integration `errorChannel` mentioned above.
You can therefore consume errors for specific destinations and/or for all destinations, using a standard Spring Integration flow (`IntegrationFlow`, `@ServiceActivator`, etc).
On the consumer side, the listener thread catches any exceptions and forwards an `ErrorMessage` to the destination's error channel.
The payload of the message is a `MessagingException` with the normal `failedMessage` and `cause` properties.
Usually, the raw data received from the broker is included in a header.
For binders that support (and are configured with) a dead letter destination; a `MessagePublishingErrorHandler` is subscribed to the channel, and the raw data is forwarded to the dead letter destination.
On the producer side; for binders that support some kind of async result after publishing messages (e.g. RabbitMQ, Kafka), you can enable an error channel by setting the `...producer.errorChannelEnabled` to `true`.
The payload of the `ErrorMessage` depends on the binder implementation but will be a `MessagingException` with the normal `failedMessage` property, as well as additional properties about the failure.
Refer to the binder documentation for complete details.
===== Using @StreamListener for Automatic Content Type Handling
@@ -1246,6 +1262,11 @@ When native encoding is used, it is the responsibility of the consumer to use ap
Also, when native encoding/decoding is used the `headerMode` property is ignored and headers will not be embedded into the message.
+
Default: `false`.
errorChannelEnabled::
When set to `true`, if the binder supports async send results; send failures will be sent to an error channel for the destination.
See <<binder-error-channels>> for more information.
+
Default: `false`.
[[dynamicdestination]]
=== Using dynamically bound destinations