GH-715: Add retry, dlq for transactional binders
Resolves https://github.com/spring-cloud/spring-cloud-stream-binder-kafka/issues/715 When using transactions, binder retry, dlq cannot be used because the retry runs within the transaction, which is undesirable if there is another resource involved; also publishing to the DLQ could be rolled back. Use the retry properties to configure an `AfterRollbackProcessor` to perform the retry and DLQ publishing after the transaction has rolled back. Add docs; move the container customizer invocation to the end.
This commit is contained in:
committed by
Soby Chacko
parent
34b0945d43
commit
88912b8d6b
@@ -561,6 +561,10 @@ When used in a processor application, the consumer starts the transaction; any r
|
||||
When the listener exits normally, the listener container will send the offset to the transaction and commit it.
|
||||
A common producer factory is used for all producer bindings configured using `spring.cloud.stream.kafka.binder.transaction.producer.*` properties; individual binding Kafka producer properties are ignored.
|
||||
|
||||
IMPORTANT: Normal binder retries (and dead lettering) are not supported with transactions because the retries will run in the original transaction, which may be rolled back and any published records will be rolled back too.
|
||||
When retries are enabled (the common property `maxAttempts` is greater than zero) the retry properties are used to configure a `DefaultAfterRollbackProcessor` to enable retries at the container level.
|
||||
Similarly, instead of publishing dead-letter records within the transaction, this functionality is moved to the listener container, again via the `DefaultAfterRollbackProcessor` which runs after the main transaction has rolled back.
|
||||
|
||||
If you wish to use transactions in a source application, or from some arbitrary thread for producer-only transaction (e.g. `@Scheduled` method), you must get a reference to the transactional producer factory and define a `KafkaTransactionManager` bean using it.
|
||||
|
||||
====
|
||||
|
||||
Reference in New Issue
Block a user