我开发了一个简单的客户端,用于接收来自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握手错误。
由于存在错误,因此消息不会被使用,而是保留在队列中。
问题是我的客户端继续尝试无限期地消耗相同的消息。您能为我提供解决方案的建议吗?
我要的是在发生严重的全局错误的情况下,在一段时间内停止使用消息。也许线程睡眠?有弹簧解决方案吗?我在这里想念什么吗?

最佳答案

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

07-24 20:28