4

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

只需要获得一种使用 Spring-AMQP 配置 AutomaticRecoveryEnabled 和 NetworkRecoveryInterval 的方法。如果您使用本机 RabbitMQ 库进行开发,则可以直接选择设置这些标志。但我没有找到使用弹簧做同样的解决方法

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

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

在这方面的任何帮助都是非常可观的。提前致谢。

4

2 回答 2

8

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

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

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

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

于 2014-08-07T18:28:23.623 回答
1

Well, CachingConnectionFactory has another costructor to apply a com.rabbitmq.client.ConnectionFactory.

So, it just enough to cofigure the last one as a an additional @Bean with appropriate options and inject it to the CachingConnectionFactory.

于 2014-08-07T10:32:26.960 回答