GH-2797: AMQP: Add confirm-timeout
Resolves https://github.com/spring-projects/spring-integration/issues/2797 Avoid runtime casting to `RabbitTemplate`.
This commit is contained in:
committed by
Artem Bilan
parent
e13aa288b6
commit
5245effd32
@@ -491,6 +491,15 @@ public Object handle(@Payload String payload, @Header(AmqpHeaders.CHANNEL) Chann
|
||||
----
|
||||
====
|
||||
|
||||
[[amqp-outbound-endpoints]]
|
||||
=== Outbound Channel Adapter
|
||||
|
||||
The following outbound endpoints have many similar configuration options.
|
||||
Starting with version 5.2, the `confirm-timeout` has been added.
|
||||
Normally, when publisher confirms are enabled, the broker will quickly return an ack (or nack) which will be sent to the appropriate channel.
|
||||
If a channel is closed before the confirm is received, the Spring AMQP framework will synthesize a nack.
|
||||
"Missing" acks should never occur but, if you set this property, the endpoint will periodically check for them and synthesize a nack if the time elapses without a confirm being received.
|
||||
|
||||
[[amqp-outbound-channel-adapter]]
|
||||
=== Outbound Channel Adapter
|
||||
|
||||
@@ -511,11 +520,12 @@ The following example shows the available properties for an AMQP outbound channe
|
||||
confirm-correlation-expression="" <10>
|
||||
confirm-ack-channel="" <11>
|
||||
confirm-nack-channel="" <12>
|
||||
return-channel="" <13>
|
||||
error-message-strategy="" <14>
|
||||
header-mapper="" <15>
|
||||
mapped-request-headers="" <16>
|
||||
lazy-connect="true" /> <17>
|
||||
confirm-timeout="" <13>
|
||||
return-channel="" <14>
|
||||
error-message-strategy="" <15>
|
||||
header-mapper="" <16>
|
||||
mapped-request-headers="" <17>
|
||||
lazy-connect="true" /> <18>
|
||||
|
||||
----
|
||||
|
||||
@@ -570,21 +580,24 @@ The payload is the correlation data defined by the `confirm-correlation-expressi
|
||||
If the expression is `#root` or `#this`, the message is built from the original message, with the `amqp_publishConfirm` header set to `false`.
|
||||
When there is an `ErrorMessageStrategy`, the message is an `ErrorMessage` with a `NackedAmqpMessageException` payload.
|
||||
Optional (the default is `nullChannel`).
|
||||
<13> The channel to which returned messages are sent.
|
||||
<13> When set, the adapter will synthesize a negative acknowledgment (nack) if a publisher confirm is not received within this time in milliseconds.
|
||||
Pending confirms are checked every 50% of this value, so the actual time a nack is sent will be between 1x and 1.5x this value.
|
||||
Default none (nacks will not be generated).
|
||||
<14> The channel to which returned messages are sent.
|
||||
When provided, the underlying AMQP template is configured to return undeliverable messages to the adapter.
|
||||
When there is no `ErrorMessageStrategy` configured, the message is constructed from the data received from AMQP, with the following additional headers: `amqp_returnReplyCode`, `amqp_returnReplyText`, `amqp_returnExchange`, `amqp_returnRoutingKey`.
|
||||
When there is an `ErrorMessageStrategy`, the message is an `ErrorMessage` with a `ReturnedAmqpMessageException` payload.
|
||||
Optional.
|
||||
<14> A reference to an `ErrorMessageStrategy` implementation used to build `ErrorMessage` instances when sending returned or negatively acknowledged messages.
|
||||
<15> A reference to an `AmqpHeaderMapper` to use when sending AMQP Messages.
|
||||
<15> A reference to an `ErrorMessageStrategy` implementation used to build `ErrorMessage` instances when sending returned or negatively acknowledged messages.
|
||||
<16> A reference to an `AmqpHeaderMapper` to use when sending AMQP Messages.
|
||||
By default, only standard AMQP properties (such as `contentType`) are copied to the Spring Integration `MessageHeaders`.
|
||||
Any user-defined headers is not copied to the message by the default`DefaultAmqpHeaderMapper`.
|
||||
Not allowed if 'request-header-names' is provided.
|
||||
Optional.
|
||||
<16> Comma-separated list of names of AMQP Headers to be mapped from the `MessageHeaders` to the AMQP Message.
|
||||
<17> Comma-separated list of names of AMQP Headers to be mapped from the `MessageHeaders` to the AMQP Message.
|
||||
Not allowed if the 'header-mapper' reference is provided.
|
||||
The values in this list can also be simple patterns to be matched against the header names (e.g. `"\*"` or `"thing1*, thing2"` or `"*thing1"`).
|
||||
<17> When set to `false`, the endpoint attempts to connect to the broker during application context initialization.
|
||||
<18> When set to `false`, the endpoint attempts to connect to the broker during application context initialization.
|
||||
This allows "`fail fast`" detection of bad configuration but also causes initialization to fail if the broker is down.
|
||||
When `true` (the default), the connection is established (if it does not already exist because some other component established it) when the first message is sent.
|
||||
====
|
||||
@@ -691,7 +704,7 @@ The following listing shows the possible properties for an AMQP Outbound Gateway
|
||||
====
|
||||
[source,xml]
|
||||
----
|
||||
<int-amqp:outbound-gateway id="inboundGateway" <1>
|
||||
<int-amqp:outbound-gateway id="outboundGateway" <1>
|
||||
request-channel="myRequestChannel" <2>
|
||||
amqp-template="" <3>
|
||||
exchange-name="" <4>
|
||||
@@ -706,9 +719,10 @@ The following listing shows the possible properties for an AMQP Outbound Gateway
|
||||
confirm-correlation-expression="" <13>
|
||||
confirm-ack-channel="" <14>
|
||||
confirm-nack-channel="" <15>
|
||||
return-channel="" <16>
|
||||
error-message-strategy="" <17>
|
||||
lazy-connect="true" /> <18>
|
||||
confirm-timeout="" <16>
|
||||
return-channel="" <17>
|
||||
error-message-strategy="" <18>
|
||||
lazy-connect="true" /> <19>
|
||||
|
||||
----
|
||||
|
||||
@@ -771,13 +785,16 @@ The payload is the correlation data defined by `confirm-correlation-expression`
|
||||
If the expression is `#root` or `#this`, the message is built from the original message, with the `amqp_publishConfirm` header set to `false`.
|
||||
When there is an `ErrorMessageStrategy`, the message is an `ErrorMessage` with a `NackedAmqpMessageException` payload.
|
||||
Optional (the default is `nullChannel`).
|
||||
<16> The channel to which returned messages are sent.
|
||||
<16> When set, the gateway will synthesize a negative acknowledgment (nack) if a publisher confirm is not received within this time in milliseconds.
|
||||
Pending confirms are checked every 50% of this value, so the actual time a nack is sent will be between 1x and 1.5x this value.
|
||||
Default none (nacks will not be generated).
|
||||
<17> The channel to which returned messages are sent.
|
||||
When provided, the underlying AMQP template is configured to return undeliverable messages to the adapter.
|
||||
When there is no `ErrorMessageStrategy` configured, the message is constructed from the data received from AMQP, with the following additional headers: `amqp_returnReplyCode`, `amqp_returnReplyText`, `amqp_returnExchange`, and `amqp_returnRoutingKey`.
|
||||
When there is an `ErrorMessageStrategy`, the message is an `ErrorMessage` with a `ReturnedAmqpMessageException` payload.
|
||||
Optional.
|
||||
<17> A reference to an `ErrorMessageStrategy` implementation used to build `ErrorMessage` instances when sending returned or negatively acknowledged messages.
|
||||
<18> When set to `false`, the endpoint attempts to connect to the broker during application context initialization.
|
||||
<18> A reference to an `ErrorMessageStrategy` implementation used to build `ErrorMessage` instances when sending returned or negatively acknowledged messages.
|
||||
<19> When set to `false`, the endpoint attempts to connect to the broker during application context initialization.
|
||||
This allows "`fail fast`" detection of bad configuration by logging an error message if the broker is down.
|
||||
When `true` (the default), the connection is established (if it does not already exist because some other component established it) when the first message is sent.
|
||||
====
|
||||
@@ -901,7 +918,7 @@ The following listing shows the possible configuration options for an AMQP async
|
||||
====
|
||||
[source,xml]
|
||||
----
|
||||
<int-amqp:outbound-gateway id="inboundGateway" <1>
|
||||
<int-amqp:outbound-async-gateway id="asyncOutboundGateway" <1>
|
||||
request-channel="myRequestChannel" <2>
|
||||
async-template="" <3>
|
||||
exchange-name="" <4>
|
||||
@@ -916,8 +933,9 @@ The following listing shows the possible configuration options for an AMQP async
|
||||
confirm-correlation-expression="" <13>
|
||||
confirm-ack-channel="" <14>
|
||||
confirm-nack-channel="" <15>
|
||||
return-channel="" <16>
|
||||
lazy-connect="true" /> <17>
|
||||
confirm-timeout="" <16>
|
||||
return-channel="" <17>
|
||||
lazy-connect="true" /> <18>
|
||||
|
||||
----
|
||||
|
||||
@@ -978,12 +996,15 @@ The channel to which negative (`nack`) publisher confirmations are sent.
|
||||
The payload is the correlation data defined by the `confirm-correlation-expression`.
|
||||
Requires the underlying `AsyncRabbitTemplate` to have its `enableConfirms` property set to `true`.
|
||||
Optional (the default is `nullChannel`).
|
||||
<16> The channel to which returned messages are sent.
|
||||
<16> When set, the gateway will synthesize a negative acknowledgment (nack) if a publisher confirm is not received within this time in milliseconds.
|
||||
Pending confirms are checked every 50% of this value, so the actual time a nack is sent will be between 1x and 1.5x this value.
|
||||
Default none (nacks will not be generated).
|
||||
<17> The channel to which returned messages are sent.
|
||||
When provided, the underlying AMQP template is configured to return undeliverable messages to the gateway.
|
||||
The message is constructed from the data received from AMQP, with the following additional headers: `amqp_returnReplyCode`, `amqp_returnReplyText`, `amqp_returnExchange`, and `amqp_returnRoutingKey`.
|
||||
Requires the underlying `AsyncRabbitTemplate` to have its `mandatory` property set to `true`.
|
||||
Optional.
|
||||
<17> When set to `false`, the endpoint tries to connect to the broker during application context initialization.
|
||||
<18> When set to `false`, the endpoint tries to connect to the broker during application context initialization.
|
||||
Doing so allows "`fail fast`" detection of bad configuration, by logging an error message if the broker is down.
|
||||
When `true` (the default), the connection is established (if it does not already exist because some other component established
|
||||
it) when the first message is sent.
|
||||
|
||||
@@ -16,6 +16,12 @@ See <<rate-limiter-advice>> for more information.
|
||||
[[x5.2-general]]
|
||||
=== General Changes
|
||||
|
||||
[[x5.2-amqp]]
|
||||
==== AMQP Changes
|
||||
|
||||
The outbound endpoints can now be configured to synthesize a "nack" if no publisher confirm is received within a timeout.
|
||||
See <<amqp-outbound-endpoints>> for more information.
|
||||
|
||||
[[x5.2-file]]
|
||||
==== File Changes
|
||||
|
||||
|
||||
Reference in New Issue
Block a user