Я использую PHP AMQPLib для выполнения некоторых фоновых заданий и заданий, которые можно выполнять параллельно. Моя проблема в том, что если у меня слишком много рабочих мест, у меня, похоже, заканчивается память. Поэтому я ограничил работу максимум 5 в любое время. Хотя теперь максимальное количество очередей останется равным 6 (основная очередь плюс 5 очередей обратного вызова), соединения по-прежнему разрываются, что, по-видимому, приводит к тупику.
Клиент подтвердит входящий обратный вызов:
public function on_response($rep) {
if($rep->get('correlation_id') == $this->corr_id) {
$this->ready = true;
$this->response = $rep->body;
$rep->delivery_info['channel']->basic_ack($rep->delivery_info['delivery_tag']);
$rep->delivery_info['channel']->queue_delete();
$this->connection->close(); //connection is opened in constructor via $this->connection = new AMQPConnection($host, $port, $username, $password, $vHost);
}
}
в то время как очередь правильно закрыта и удалена (как указано выше, максимальное количество очередей остается равным 6 в любое время), соединение остается открытым. Как мне удается на самом деле закрыть устаревшее соединение?
[РЕДАКТИРОВАТЬ]: Кажется, проблема в том, что у меня заканчивается оперативная память, потому что RabbitMQ не освобождает оперативную память, пока открыто соединение. так что мне действительно нужно знать, как правильно разорвать эти соединения …Задача ещё не решена.
Других решений пока нет …