覆盖

2017-01-23 186 views
1

我们一直在使用的框架使用Spring AMQP,其中框架设置SimpleMessageListenerContainer.setDefaultRequeueRejected(假)SimpleMessageListenerContainer.setDefaultRequeueRejected(假的)行为,覆盖

这意味着默认的消息不会,如果抛出来重新排队消费者的例外。

有没有什么办法可以改变这种行为不改变SimpleMessageListenerContainer.setDefaultRequeueRejected(真)

回答

0

如果你的意思是你可以设置容器默认情况下不重排队,但对于一些例外,可以唯一的办法重新排队这是否将defaultRequeueRejected设置为true(默认值)并使用自定义错误处理程序。

默认ConditionalRejectingErrorHandler配置了默认FatalExceptionStrategy,它将某些不可恢复的异常视为致命的(消息转换异常等)。当这些异常被抛出时,该消息被拒绝并且不被重新排序。

您可以提供自定义FatalExceptionStrategy的错误处理程序和(从版本1.6.3)注入的ConditionalRejectingErrorHandler.DefaultExceptionStrategy一个子类的实例和实施isUserCauseFatal() - 这可以让你决定哪些异常是致命的(拒绝和不重新排队)并且应该重新排序。错误处理程序通过向容器发送信号AmqpRejectAndDontRequeueException来实现此目的,从而不需要消息。

在1.6.3之前,你必须注入一个完整的实现FatalExceptionStrategy