spring cloud stream rabbit自定义错误处理程序和republishToDlq不能一起工作

cnjp1d6j  于 2023-03-29  发布在  Spring
关注(0)|答案(1)|浏览(164)

我有一个自定义错误处理程序,republishToDlq为true,但dlq中的消息是一个被拒绝的消息,而不是重新发布的消息,缺少x-exception-stacktrace等。
我想同时使用自己的错误处理程序和republishToDlq,因为我需要x-exception-stacktrace
我该怎么做?或者我应该使用拦截器来代替我的自定义错误处理程序(发送电子邮件,审计等)?@GlobalChannelInterceptor(patterns =“error”)?

spring:
  cloud:
    stream:
      default.error-handler-definition: myErrorHandler
      function.definition: personSave

      bindings:
        personSave-in-0:
          destination: personSaveRequest
          group: personSaveRequestGroup
          content-type: application/json

      rabbit:
        bindings:
          personSave-in-0:
            consumer:
              autoBindDlq: true
              deadLetterExchange: nest.dlx
              deadLetterQueueName: nest.dlq
@Bean
public Consumer<ErrorMessage> myErrorHandler() {
        return errorMessage -> {
                        //email, audit etc
            log.error("Some error: {}", errorMessage);
            ReflectionUtils.rethrowRuntimeException(errorMessage.getPayload());
    };
}
9jyewag0

9jyewag01#

因此,您可以使用系统错误处理(DLQ)或您自己的,您可以做任何您想要的事情,包括通过RabbitTemplate手动发送消息做DLQ。
我想知道为什么你会期望你的自定义错误处理程序会以某种方式识别你的DLQ配置?它们在任何方面都是不相关的。这里描述的所有错误处理机制都是相互排斥的。

相关问题