我有一个自定义错误处理程序,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());
};
}
1条答案
按热度按时间9jyewag01#
因此,您可以使用系统错误处理(DLQ)或您自己的,您可以做任何您想要的事情,包括通过
RabbitTemplate
手动发送消息做DLQ。我想知道为什么你会期望你的自定义错误处理程序会以某种方式识别你的DLQ配置?它们在任何方面都是不相关的。这里描述的所有错误处理机制都是相互排斥的。