Не удалось подключиться к удаленному серверу rabbitmq с помощью pika

Я пытаюсь подключиться к своему удаленному rabbitmq с помощью pika, но получаю сообщение об ошибке Connectionclosed(). Я внес необходимые изменения в rabbit.config для гостевого пользователя, чтобы разрешить все соединения, а также одно и то же соединение работает с моим кодом Java. Я даже пытался создать нового пользователя со всеми правами и подключить его, но это все равно не работает. Тот же код отлично работает на моем локальном хосте. Может кто-нибудь, пожалуйста, дайте мне знать, что я могу делать неправильно здесь?

def queue_message(message, queue):
    credentials = pika.PlainCredentials('xxxx', 'xxxx')
    parameters = pika.ConnectionParameters('remote-server',
                                   5672,
                                    '/',
                                    credentials)
   connection = pika.BlockingConnection(parameters)
   channel = connection.channel()
   channel.queue_declare(queue='python_update_queue')
   channel.basic_publish(exchange='update.fanout',
                  body=message)
   logger.info("Sent message: {} to queue: {}".format(message, queue))
   print 'message sent'
   connection.close()

Ниже приведена ошибка, которую я получаю:

app/project/rabbitmq.py" in queue_message
connection = pika.BlockingConnection(parameters)
env/lib/python2.7/site-packages/pika/adapters/blocking_connection.py" in __init__
     self._process_io_for_connection_setup()
env/lib/python2.7/site-packages/pika/adapters/blocking_connection.py" in ss_io_for_connection_setup
                        self._open_error_result.is_ready)
env/lib/python2.7/site-packages/pika/adapters/blocking_connection.py" in _flush_output
         raise exceptions.ConnectionClosed

person Crane    schedule 29.02.2016    source источник


Ответы (4)


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

кроме того, ваш код явно вызывает connection.close()... поэтому может быть, поэтому ваше соединение закрывается

person Derick Bailey    schedule 29.02.2016
comment
Вы правы насчет таймаута. Тайм-аут по умолчанию в pika установлен на 0,25 секунды. После увеличения этого тайм-аута все работает гладко. Спасибо! - person Crane; 01.03.2016
comment
Боже, я искал часы, пока не нашел эти советы по тайм-ауту сокета. Спасибо большое, наконец-то все заработало... - person schankam; 27.09.2016

Это действительно была проблема тайм-аута. После увеличения таймаута в параметрах соединения соединение установилось корректно.

parameters = pika.ConnectionParameters('remote-server',
                                   5672,
                                   '/',
                                   socket_timeout=2)
person Crane    schedule 01.03.2016

Если вы подключаетесь к удаленному серверу rabbitmq, проверьте это:

  1. порт удаленного сервера открыт с помощью брандмауэра

  2. удаленный сервер имеет общедоступный IP-адрес, а пользователь rabbitmq имеет доступ к этому серверу

  3. сервер rabbitmq активно работает
person Cphilo    schedule 29.02.2016

  • добавьте своего пользователя admin в тег администратора;

    rabbitmqctl set_user_tags admin administrator      
    
  • добавить достаточно прав для пользователя admin

    rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"     
    
person Howard.TH    schedule 08.11.2016