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

时间:2017-04-04 15:25:49

标签: 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握手错误,因为我没有安装我的私钥。 由于存在错误,消息未被消耗,因此它将保留在队列中。 问题是我的客户端继续尝试无限期地使用相同的消息。你能给我一个解决方案吗? 我想要的是,在严重的全局错误的情况下,停止消费“while”消息。也许一个线程睡眠?这有弹簧解决方案吗?我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:1)

默认情况下,侦听器容器将尝试每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;
}