在RabbitMQ中是否有使用Spring-AMQP设置AutomaticRecoveryEnabled的选项?



在使用Spring-AMQP使用RabbitMQ时获得库存

只需要找到一种方法来配置AutomaticRecoveryEnabled和NetworkRecoveryInterval使用Spring-AMQP。如果你使用本地RabbitMQ库进行开发,可以直接设置这些标志。但我没有找到一个解决方法来做同样的使用spring

使用RabbitMQ原生库(不需要任何帮助)

factory.setAutomaticRecoveryEnabled(true);
factory.setNetworkRecoveryInterval(10000);

使用Spring-AMPQ(需要帮助)

像上面一样,我在尝试Spring-AMPQ时没有发现任何这样的方法。这就是我现在正在做的。

@Bean(name="listener")
public SimpleMessageListenerContainer listenerContainer() 
{
    SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
    container.setConnectionFactory(connectionFactory());
    container.setQueueNames(env.getProperty("mb.queue"));
    container.setMessageListener(new MessageListenerAdapter(messageListener));
    return container;
}

在这方面的任何帮助都是非常感激的。

说明一下;Spring AMQP NOT compatible with automaticRecoveryEnabled .

它有自己的恢复机制,并且不知道客户端正在执行的底层恢复。这就留下了悬空连接和通道。

我正在研究一个临时的解决方案,它将使其兼容(但将有效地禁用Spring AMQP使用的任何连接/通道的客户端恢复,同时为同一连接工厂的其他用户保留客户端恢复)。

长期修复将需要对侦听器容器进行重大重写,以利用客户端恢复代码。

好吧,CachingConnectionFactory有另一个构造函数来应用com.rabbitmq.client.ConnectionFactory

因此,将最后一个配置为具有适当选项的额外@Bean并将其注入CachingConnectionFactory就足够了。

从Java客户端4.0.0版本开始,默认启用自动恢复。

可以这样做,

ConnectionFactory factory = new ConnectionFactory();
factory.setAutomaticRecoveryEnabled(true);
// connection that will recover automatically
Connection conn = factory.newConnection();

相关内容

  • 没有找到相关文章

最新更新