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