Я использую Spring Boot с Kafka и @retryabletopic аннотация.
Чего я хочу достичь:
Сообщения, которые в конечном итоге в DLQ должны быть обернуты в пользовательский тип (DlQeventWrapper), который включает в себя оригинальную загрузку плюс некоторые ошибки MetAdata. Пользовательский DeadtletterPublishingRecoverer (как как @Bean, так и как @Component) и переопределение CreateProducerRecord (...), чтобы я мог обернуть исходное событие, прежде чем оно будет отправлено в тему DLQ. Вместо этого @retryabletopic продолжает использовать восстановитель по умолчанию, который просто переиздает оригинальный Originalevent в DLQ. Потому что мой @dlthandler написан, чтобы принять DlqeventWrapper, Spring бросает ошибку преобразования до того, как мой @dlthandler даже будет вызван.
Я использую Spring Boot с Kafka и @retryabletopic аннотация. Чего я хочу достичь: Сообщения, которые в конечном итоге в DLQ должны быть обернуты в пользовательский тип (DlQeventWrapper), который включает в себя оригинальную загрузку плюс некоторые ошибки MetAdata. Пользовательский DeadtletterPublishingRecoverer (как как @Bean, так и как @Component) и переопределение CreateProducerRecord (...), чтобы я мог обернуть исходное событие, прежде чем оно будет отправлено в тему DLQ. Вместо этого @retryabletopic продолжает использовать восстановитель по умолчанию, который просто переиздает оригинальный Originalevent в DLQ. Потому что мой @dlthandler написан, чтобы принять DlqeventWrapper, Spring бросает ошибку преобразования до того, как мой @dlthandler даже будет вызван.[code] @KafkaListener(topics = "my-topic", groupId = "my-group") @RetryableTopic( attempts = "2", backoff = @Backoff(delay = 1000), dltStrategy = DltStrategy.FAIL_ON_ERROR, autoCreateTopics = "false", topicSuffixingStrategy = SuffixingWithIndexTopicNamingStrategy.SUFFIX_WITH_INDEX_VALUE, sameIntervalTopicReuseStrategy = SameIntervalReuseTopicReuseStrategy.MULTIPLE_TOPICS, retryTopicSuffix = ".RETRY", dltSuffix = ".DLQ" ) public void listen(OriginalEvent event) { throw new RuntimeException("Failing for test"); }