From 9b0a646da4882288f7463789aa8b66abbd22d4d7 Mon Sep 17 00:00:00 2001 From: Sabby Anandan Date: Sat, 31 Mar 2018 12:12:00 -0700 Subject: [PATCH] Add visual representation for custom vs. global error handling --- .../images/custom_vs_global_error_channels.png | Bin 0 -> 48392 bytes .../asciidoc/spring-cloud-stream-overview.adoc | 15 ++++++++++----- 2 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 spring-cloud-stream-core-docs/src/main/asciidoc/images/custom_vs_global_error_channels.png diff --git a/spring-cloud-stream-core-docs/src/main/asciidoc/images/custom_vs_global_error_channels.png b/spring-cloud-stream-core-docs/src/main/asciidoc/images/custom_vs_global_error_channels.png new file mode 100644 index 0000000000000000000000000000000000000000..6363d5162b54ac75b8aa1da5850bb49d499e508d GIT binary patch literal 48392 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 Puw?Hj-p-PI`sRNClkEZS literal 0 HcmV?d00001 diff --git a/spring-cloud-stream-core-docs/src/main/asciidoc/spring-cloud-stream-overview.adoc b/spring-cloud-stream-core-docs/src/main/asciidoc/spring-cloud-stream-overview.adoc index cf052ba4b..7855d6116 100644 --- a/spring-cloud-stream-core-docs/src/main/asciidoc/spring-cloud-stream-overview.adoc +++ b/spring-cloud-stream-core-docs/src/main/asciidoc/spring-cloud-stream-overview.adoc @@ -661,18 +661,21 @@ boolean result = pollableSource.poll(received -> { Errors happen, and Spring Cloud Stream provides several flexible mechanisms to handle them. The error handling comes in two flavors: - * *system:* The error handling is delegated to the binder (re-queue, DL, and others). Note that the techniques are dependent on binder implementation and the - capability of the underlying messaging middleware. - * *application:* The error handling is done within the application (custom error handler). + * *system:* The error handling is delegated to the binder (re-queue, DL, and others). Note that the techniques are dependent on binder implementation and the + capability of the underlying messaging middleware. + Spring Cloud Stream uses the https://github.com/spring-projects/spring-retry[Spring Retry] library to facilitate successful message processing. See <> for more details. However, when all fails, the exceptions thrown by the message handlers are propagated back to the binder. At that point, binder invokes custom error handler or communicates the error back to the messaging system (re-queue, DLQ, and others). ===== Application Error Handling -First, we examine application-level error handling. +There are two types of application-level error handling. Errors can be handled at each binding subscription or a global handler can handle all the binding subscription errors. Let's review the details. + +.A Spring Cloud Stream Sink Application with Custom and Global Error Handlers +image::custom_vs_global_error_channels.png[width=300,scaledwidth="50%"] For each input binding, Spring Cloud Stream creates a dedicated error channel with the following semantics `..errors`. If such a channel has a subscriber, all errors are sent to that subscriber. @@ -785,7 +788,7 @@ To get more relevant information about the original error, you must set an addit spring.cloud.stream.rabbit.bindings.input.consumer.republish-to-dlq=true ---- -Doing so forces the internal error handler to intercept the error message and add additional information to it before publishing it to DLQ. +Doing so forces the internal error handler to intercept the error message and add additional information to it before publishing it to DLQ. Once configured, you can see that the error message contains more information relevant to the original error, as follows: [source,text] @@ -805,6 +808,8 @@ x-exception-stacktrace: org.springframework.messaging.MessageHandlingException: Payload {"name”:"Bob"} ---- +This effectively combines application-level and system-level error handling to further assist with downstream troubleshooting mechanics. + ====== Re-queue As mentioned earlier, the currently supported binders (Rabbit and Kafka) rely on `RetryTemplate` to facilitate successful message processing. See <> for details.