Должен ли я закрывать канал / соединение после каждой публикации?

Я использую amqplib в Node.js, и мне не ясны лучшие практики в моем коде.

По сути, мой текущий код вызывает amqp.connect() когда сервер Node запускается, а затем использует разные каналы для каждого производителя и каждого потребителя, никогда не закрывая ни один из них. Я хотел бы знать, имеет ли это какой-то смысл, или я должен создать канал, публиковать и закрывать его каждый раз, когда я хочу опубликовать сообщение. А как насчет связи? Является ли это "хорошей практикой" - подключаться один раз, а затем держать его открытым на протяжении всего срока службы моего сервера?
На стороне потребителя - могу ли я использовать одно соединение и один канал для прослушивания нескольких очередей?

Спасибо за любые разъяснения

1 ответ

Решение

В целом, не рекомендуется открывать и закрывать соединения и каналы для каждого сообщения. Связи являются долгоживущими, и для их открытия и закрытия требуются ресурсы. Для каналов они разделяют TCP-соединение с соединением, поэтому они более легкие, но они все равно будут потреблять память и определенно не должны оставаться открытыми после их использования.

Рекомендуется иметь канал для потока и канал для потребителя. Но для публикации совершенно нормально использовать тот же канал. Но имейте в виду, что в зависимости от операций, протокол может убить канал в определенных ситуациях (например, проверка существования очереди), поэтому подготовьтесь к этому. Существует также мягкие (настраиваемые) и жесткие (обычно 65535) ограничения на максимальное количество каналов во многих клиентских реализациях.

Таким образом, чтобы подвести итог, в зависимости от вашего варианта использования используйте одно или несколько соединений, открывайте каналы, когда они вам нужны, и делитесь ими, когда это имеет смысл, но не забывайте закрывать их, когда закончите.

Документация rabbitmq объясняет природу соединений и каналов (конец документа). И принятый ответ на этот вопрос имеет хорошую информацию по этому вопросу.

Другие вопросы по тегам