GH-2728: AMQP Manual acks and conversion errors
Resolves https://github.com/spring-projects/spring-integration/issues/2728 Provide access to the channel and delivery tag in the `ErrorMessage` when using `AcknowledgeMode.MANUAL`.
This commit is contained in:
committed by
Artem Bilan
parent
65b889925a
commit
f82c7164f7
@@ -1081,6 +1081,20 @@ public class AmqpAsyncApplication {
|
||||
----
|
||||
====
|
||||
|
||||
[[amqp-conversion-inbound]]
|
||||
=== Inbound Message Conversion
|
||||
|
||||
Inbound messages, arriving at the channel adapter or gateway, are converted to the `spring-messaging` `Message<?>` payload using a message converter.
|
||||
By default, a `SimpleMessageConverter` is used, which handles java serialization and text.
|
||||
Headers are mapped using the `DefaultHeaderMapper.inboundMapper()` by default.
|
||||
If a conversion error occurs, and there is no error channel defined, the exception is thrown to the container and handled by the listener container's error handler.
|
||||
The default error handler treats conversion errors as fatal and the message will be rejected (and routed to a dead-letter exchange, if the queue is so configured).
|
||||
If an error channel is defined, the `ErrorMessage` payload is a `ListenerExecutionFailedException` with properties `failedMessage` (the Spring AMQP message that could not be converted) and the `cause`.
|
||||
If the container `AcknowledgeMode` is `AUTO` (the default) and the error flow consumes the error without throwing an exception, the original message will be acknowledged.
|
||||
If the error flow throws an exception, the exception type, in conjunction with the container's error handler, will determine whether or not the message is requeued.
|
||||
If the container is configured with `AcknowledgeMode.MANUAL`, the payload is a `ManualAckListenerExecutionFailedException` with additional properties `channel` and `deliveryTag`.
|
||||
This enables the error flow to call `basicAck` or `basicNack` (or `basicReject`) for the message, to control its disposition.
|
||||
|
||||
[[content-type-conversion-outbound]]
|
||||
=== Outbound Message Conversion
|
||||
|
||||
|
||||
@@ -144,6 +144,10 @@ See the note near the bottom of <<amqp-message-headers>> for more information.
|
||||
The `contentType` header is now correctly mapped as an entry in the general headers map.
|
||||
See <<amqp-content-type>> for more information.
|
||||
|
||||
Starting with version 5.1.3, if a message conversion exception occurs when using manual acknowledgments, and an error channel is defined, the payload is a `ManualAckListenerExecutionFailedException` with additional `channel` and `deliveryTag` properties.
|
||||
This enables the error flow to ack/nack the original message.
|
||||
See <<amqp-conversion-inbound>> for more information.
|
||||
|
||||
[[x5.1-jdbc]]
|
||||
=== JDBC Changes
|
||||
|
||||
|
||||
Reference in New Issue
Block a user