- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 3 个队列。
队列主
队列重试(3次由代码控制)
尝试 3 次后排队保存错误消息。
它工作正常...但是如果我由于任何原因发送了错误的 json 消息,例如:
{
"name":"alan"," <<<< this ," is wrong for example
"age":29,
}
我的监听器不会尝试处理该消息(我想捕获此消息,因为如果我收到错误,我将发送到错误队列)
我收到 ListenerExecutionFailedException,然后丢失了此消息。
我尝试将错误处理程序添加到我的配置中:
@Bean
public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(RabbitProperties properties, ObjectProvider<ConnectionNameStrategy> connectionNameStrategy) throws Exception {
PropertyMapper map = PropertyMapper.get();
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory(properties, connectionNameStrategy));
factory.setMessageConverter(messageConverter());
**factory.setErrorHandler(errorHandler());**
RabbitProperties.Listener listener = properties.getListener();
if (listener != null && listener.getSimple() != null) {
map.from(listener.getSimple()::getConcurrency).whenNonNull().to(factory::setConcurrentConsumers);
map.from(listener.getSimple()::getMaxConcurrency).whenNonNull().to(factory::setMaxConcurrentConsumers);
map.from(listener.getSimple()::getDefaultRequeueRejected).whenNonNull().to(factory::setDefaultRequeueRejected);
}
return factory;
}
public ErrorHandler errorHandler() {
return new ConditionalRejectingErrorHandler(new ListenerExceptionHandler());
}
@Log4j2
public class ListenerExceptionHandler extends ConditionalRejectingErrorHandler.DefaultExceptionStrategy {
@Override
public boolean isFatal(Throwable t) {
if (t instanceof ListenerExecutionFailedException) {
ListenerExecutionFailedException lefe = (ListenerExecutionFailedException) t;
log.error("Failed to process inbound message from queue {}, failed message={}",
lefe.getFailedMessage().getMessageProperties().getConsumerQueue(),
lefe.getFailedMessage());
}
return super.isFatal(t);
}
}
我只是想是否可以在我的监听器上捕获此 ListenerExecutionFailedException ..可能吗?
因为在我的处理程序类中我不能做任何事情..只需设置日志..我无法将此消息发送到错误队列。
监听者:
@RabbitListener(queues = Queues.MAIN, concurrency = "2")
public void listenerMessage(Message message,@Header(name = "x-death", required = false) List<Map<String, ?>> xDeath) {
log.info("ProcessMessage Received:: {}", message.getPayload());
validateReceivedMessage(xDeath, message);
}
我尝试添加 try/catch ,例如:
try {
}catch (ListenerExecutionFailedException e){
}
没有成功。
有什么建议吗?谢谢
最佳答案
没有;消息转换异常发生在堆栈中太靠下的位置;无法使用转换失败的消息调用监听器。
此类异常被认为是致命的,以避免无限循环;您需要在原始队列上配置死信交换和路由 key ,以便将失败的消息路由到那里。
关于java - SpringAMQP - 如何捕获 ListenerExecutionFailedException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59860652/
我正在使用带有 Rabbitmq 模板的 Spring AMQP。如何将消息直接发送到省略 Exchange 的队列?我该怎么做? 最佳答案 How can i do it? 你不能;发布者不知道队列
我将 spring amqp 与多方法监听器一起使用,如下所示: @RabbitListener(queues = PLATFORM_COMMAND_QUEUE) @Component public
我有 3 个队列。 队列主 队列重试(3次由代码控制) 尝试 3 次后排队保存错误消息。 它工作正常...但是如果我由于任何原因发送了错误的 json 消息,例如: { "name":"alan","
我正在使用 SpringBoot 启动连接到 RabbitMQ 队列的 SpringAMQP 应用程序。我希望能够从生产者发送消息,指定回复队列,以便消费者只需要发送而不必调查目的地(因此不必在消息本
我是rabbitMq和Spring AMQP的新手。我正在从头开始构建一个新项目。对于其中一个组件,我们使用rabbit-Mq 作为消息代理。 在这个项目中,主要所有开发都是在 Java 中进行的。我
我希望能够使用 Spring AMQP 来设置高可用性策略。 通过 Web 界面配置 RabbitMQ (v3.1.4) 时,您可以在“管理”下选择设置策略。 这些策略适用于策略模式选择的所有队列。
我使用以下配置安装了 rabbitMQ [ {rabbit, [ {ssl_listeners, [5671]}, {ssl_options, [{cacertfile,"C:
我正在尝试将消息发布到队列,然后让某些消费者仅在它包含特定 header 时才使用它,而另一个消费者在它包含另一个 header 时才使用它。 到目前为止我所做的是设置一个 header 交换,仅当它
我是一名优秀的程序员,十分优秀!