我们正在使用带有RabbitMQ版本3.5.3的spring-amqp 1.5.2。所有队列都运行良好,我们让消费者在没有任何问题的情况下收听消费者,除了一个不断神秘地断开连接的消费者。 spring-amqp auto恢复,但几个小时后消费者断开连接,再也没有恢复过来。
队列声明为
@Bean()
public Queue analyzeTransactionsQueue(){
Map<String, Object> args = new HashMap<>();
args.put("x-message-ttl", 60000);
return new Queue("analyze.txns", true, false, false, args);
}
其他队列以类似方式声明,没有问题。
使用者(监听者)被声明为
@Bean
public SimpleRabbitListenerContainerFactory analyzeTransactionListenerContainerFactory(ConnectionFactory connectionFactory, AsyncTaskExecutor asyncTaskExecutor) {
connectionFactory.getVirtualHost());
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setConcurrentConsumers(2);
factory.setMaxConcurrentConsumers(4);
factory.setTaskExecutor(asyncTaskExecutor);
ConsumerTagStrategy consumerTagStrategy = new ConsumerTagStrategy() {
@Override
public String createConsumerTag(String queue) {
return queue;
}
};
factory.setConsumerTagStrategy(consumerTagStrategy);
return factory;
}
同样,其他没有问题的消费者也以类似的方式宣布。
收到邮件后的代码没有例外。即使在为SimpleMessageListenerContainer打开DEBUG日志记录之后,日志中也没有错误。
LogLevel=DEBUG; category=org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer; msg=Cancelling Consumer: tags=[{}], channel=Cached Rabbit Channel: AMQChannel(amqp://guest@10.17.1.13:5672/,47), acknowledgeMode=AUTO local queue size=0;
LogLevel=DEBUG; category=org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer; msg=Idle consumer terminating: Consumer: tags=[{}], channel=Cached Rabbit Channel: AMQChannel(amqp://guest@10.17.1.13:5672/,47), acknowledgeMode=AUTO local queue size=0;
关于为什么会发生这种情况的任何想法。尝试过DEBUG登录,但无济于事。
答案 0 :(得分:0)
看看你配置事物的方式,很明显你已经启用了动态扩展消费者。
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
有一个线程问题,我提交了一个修复程序,导致消费者数量降至零。这种情况在消费者缩减时发生。
从它的外观来看,你一直是这个问题的受害者。我相信修复程序已被后端移植,可以看到NSAttributedString
尝试使用最新版本,看看是否遇到同样的问题。