有没有选择使用Spring-AMQP在RabbitMQ中设置AutomaticRecoveryEnabled?

时间:2014-08-07 06:18:19

标签: java spring rabbitmq spring-amqp spring-rabbit

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

只需要使用Spring-AMQP来配置AutomaticRecoveryEnabled和NetworkRecoveryInterval。如果使用本机RabbitMQ库进行开发,可以直接设置这些标记。但我没有找到使用spring

做同样的解决方法

Using RabbitMQ Native library(don't need any help)

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;
}

在这方面的任何帮助都非常值得赞赏。提前谢谢。

2 个答案:

答案 0 :(得分:5)

只是为了澄清; Spring AMQP与automaticRecoveryEnabled 不兼容

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

我正在开发一个temporary work-around,它会使它兼容(但会有效地禁用Spring AMQP使用的任何连接/通道的客户端恢复,同时让客户端恢复适用于同一连接的其他用户工厂。

长期修复需要对侦听器容器进行重大改写才能使用客户端恢复代码。

答案 1 :(得分:1)

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

因此,只需将最后一个配置为具有适当选项的附加@Bean,然后将其注入CachingConnectionFactory