java - 如果出现严重的全局错误,请停止使用 RabbitMQ 消息

标签 java rabbitmq spring-rabbit

我开发了一个简单的客户端,用于从rabbitMQ队列接收消息。

@RabbitListener(queues = "#{'${rabbitmq.queues}'.split(',')}")
public void receiveMessage(Message message, @Header(AmqpHeaders.CONSUMER_QUEUE) String queue) {
logger.debug("message payload as string {}", new String(message.getBody()));

我目前遇到标准 SSL 握手错误,因为我尚未安装私钥。 由于出现错误,消息不会被消耗,而是保留在队列中。 问题是我的客户端继续尝试无限期地使用相同的消息。你能建议我解决这个问题吗? 我想要的是,如果发生严重的全局错误,“一段时间”停止消费消息。也许线程 sleep ?有 Spring 解决这个问题吗?我在这里遗漏了什么吗?

最佳答案

默认情况下,监听器容器将尝试每 5 秒重新连接一次。

您可以通过向监听器容器工厂添加 BackOff 来重新配置容器;类似...

@Bean
public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory() {
    SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
    factory.setConnectionFactory(connectionFactory());
    factory.setConcurrentConsumers(3);
    final ExponentialBackOff backOff = new ExponentialBackOff();
    backOff.setInitialInterval(5_000);
    backOff.setMultiplier(1.5);
    backOff.setMaxInterval(30_000);
    backOff.setMaxElapsedTime(120_000);
    factory.setRecoveryBackOff(backOff);
    return factory;
}

关于java - 如果出现严重的全局错误,请停止使用 RabbitMQ 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43211450/

相关文章:

java JAR 文件的行为与 .class 文件不同

java - 纹理在 OpenGL 中不绑定(bind)(LWJGL/Slick-util)

java - Linux 上的多点触控 Java

spring-amqp - 我们如何使用@RabbitListener 连接到消息处理之前/之后

spring-cloud - 具有 RabbitMQ 连接问题的配置服务器

java - 从二维数组或矩阵中删除重复项

java - 如何使用工作队列行为发布到多个队列?

spring - 使用 RabbitMQ 的 Spring Cloud Stream 消费者的多个 bindingRoutingKey

java - Spring AMQP 手动容器异常缓慢

rabbitmq - 什么是联合配置?