InconnectProtocolError при попытке подключения к RabbitMQ

У меня проблема с подключением из кода Python с помощью pika к докеризованному RabbitMQ. Я использую этот код для подключения к очереди:

@retry(wait_exponential_multiplier=1000, wait_exponential_max=10000, stop_max_attempt_number=2)
def rabbit_connect():
    connection_uri = cfg.get("System", "rabbit_uri", raw=True)
    queue = cfg.get("System", "queue")
    username = cfg.get("System", "username")
    password = cfg.get("System", "password")
    host = cfg.get("System", "rabbit_host")
    port = cfg.get("System", "rabbit_port")
    credentials = pika.PlainCredentials(username, password)
    log.info("Connecting  queue %s at %s:%s", queue, host, port)
    connection = None
    try:
        connection = pika.BlockingConnection(pika.ConnectionParameters(credentials=credentials, host=host, port=int(port)))
    except Exception, e:
        log.error("Can't connect to RabbitMQ")
        log.error(e.message)
        raise

А это мои докер-контейнеры:

root@pc:~# docker ps
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                                                                    NAMES
2063ad939823        rabbitmq:3-management   "/docker-entrypoint.s"   About an hour ago   Up About an hour    4369/tcp, 5671-5672/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:8080->15672/tcp   new-rabbitmg
94628f1fb33f        rabbitmq                "/docker-entrypoint.s"   About an hour ago   Up About an hour    4369/tcp, 5671-5672/tcp, 25672/tcp                                       new-rabbit

Когда я пытаюсь подключиться к localhost:8080 с любыми доступными учетными данными, pika повторяет попытку подключения, пока не появится ошибка:

Traceback (most recent call last):
  File "script.py", line 146, in worker
    connection = rabbit_connect()
  File "build/bdist.linux-x86_64/egg/retrying.py", line 49, in wrapped_f
    return Retrying(*dargs, **dkw).call(f, *args, **kw)
  File "build/bdist.linux-x86_64/egg/retrying.py", line 212, in call
    raise attempt.get()
  File "build/bdist.linux-x86_64/egg/retrying.py", line 247, in get
    six.reraise(self.value[0], self.value[1], self.value[2])
  File "build/bdist.linux-x86_64/egg/retrying.py", line 200, in call
    attempt = Attempt(fn(*args, **kwargs), attempt_number, False)
  File "script.py", line 175, in rabbit_connect
    connection = pika.BlockingConnection(pika.ConnectionParameters(credentials=credentials, host=host, port=int(port)))
  File "build/bdist.linux-x86_64/egg/pika/adapters/blocking_connection.py", line 339, in __init__
    self._process_io_for_connection_setup()
  File "build/bdist.linux-x86_64/egg/pika/adapters/blocking_connection.py", line 374, in _process_io_for_connection_setup
    self._open_error_result.is_ready)
  File "build/bdist.linux-x86_64/egg/pika/adapters/blocking_connection.py", line 410, in _flush_output
    self._impl.ioloop.poll()
  File "build/bdist.linux-x86_64/egg/pika/adapters/select_connection.py", line 602, in poll
    self._process_fd_events(fd_event_map, write_only)
  File "build/bdist.linux-x86_64/egg/pika/adapters/select_connection.py", line 443, in _process_fd_events
    handler(fileno, events, write_only=write_only)
  File "build/bdist.linux-x86_64/egg/pika/adapters/base_connection.py", line 364, in _handle_events
    self._handle_read()
  File "build/bdist.linux-x86_64/egg/pika/adapters/base_connection.py", line 412, in _handle_read
    return self._handle_disconnect()
  File "build/bdist.linux-x86_64/egg/pika/adapters/base_connection.py", line 288, in _handle_disconnect
    self._adapter_disconnect()
  File "build/bdist.linux-x86_64/egg/pika/adapters/select_connection.py", line 95, in _adapter_disconnect
    super(SelectConnection, self)._adapter_disconnect()
  File "build/bdist.linux-x86_64/egg/pika/adapters/base_connection.py", line 154, in _adapter_disconnect
    self._check_state_on_disconnect()
  File "build/bdist.linux-x86_64/egg/pika/adapters/base_connection.py", line 169, in _check_state_on_disconnect
    raise exceptions.IncompatibleProtocolError
IncompatibleProtocolError

Это какая-то ошибка? Или я что-то не так делаю?


person bartekmp    schedule 03.03.2016    source источник


Ответы (1)


Вы сопоставили localhost:8080 с портом 15672 док-контейнера (new-rabbitmg), который на самом деле является портом для управления webui. Порт для связи amqp — 5672 или 5671.

person cantSleepNow    schedule 03.03.2016