Пул подключения к RabbitMQ

В проекте, написанном на Erlang, каковы лучшие практики организации соединений с RabbitMQ? У меня есть большое количество долгоживущих процессов Erlang, каждому из них нужно отправлять/получать сообщения через RabbitMQ. Должен ли я открывать соединение во всех из них или лучше использовать пул фиксированного размера? Есть ли уже библиотека для этой задачи? Может лучше поделиться хотя бы каналом?


person Eugene Shubin    schedule 08.09.2015    source источник


Ответы (1)


Одно соединение на процесс.

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

Однако важной частью является то, что у вас есть только 1 соединение на процесс.

person Derick Bailey    schedule 09.09.2015
comment
Только что нашел противоположное утверждение stackoverflow.com/questions/10407760/ - person Eugene Shubin; 09.09.2015
comment
этот пост подтверждает то, что я сказал о связях. он предлагает другой подход к каналам, и это нормально. как вы используете каналы зависит от вас. они дешевые. по моему опыту, тем не менее, хранение каналов, посвященных только публикации или только потреблению из определенной очереди, упрощает задачу. - person Derick Bailey; 09.09.2015
comment
Дерик, вы предлагаете одно соединение на процесс, а у меня много процессов. Скажем, процесс для каждого HTTP-соединения. Как вы думаете, стоит ли открывать соединение amqp для каждого из них? - person Eugene Shubin; 09.09.2015
comment
мне интересно, используем ли мы другое определение процесса. ваше веб-приложение — это 1 запущенное программирование... каждый экземпляр веб-приложения — это 1 запущенный процесс, который должен подключаться к rabbitmq. должно быть 1 соединение rabbitmq для каждого экземпляра приложения, которому необходимо подключиться к rabbitmq. - person Derick Bailey; 09.09.2015
comment
но вернемся к вашему первоначальному вопросу - если у вас есть 1000 экземпляров приложения erlang, и каждому из них необходимо взаимодействовать с rabbitmq, то у вас, вероятно, будет 1000 соединений rabbitmq. единственный раз, когда я бы посоветовал этого не делать, - это если экземпляры приложения erlang очень недолговечны - встаньте, сделайте работу, быстро отключитесь. в этом случае было бы лучше общаться с центральным процессом, который подключается к rabbitmq. - person Derick Bailey; 09.09.2015
comment
Под процессами я подразумеваю процессы Erlang на одном узле. - person Eugene Shubin; 09.09.2015