2016-03-03 31 views
3

我有使用鼠兔對dockerized的RabbitMQ Python代碼連接問題。 我使用此代碼連接到隊列:IncompatibleProtocolError嘗試連接到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 

這些都是我的搬運工容器:

[email protected]:~# 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 

當我嘗試連接到本地主機:與任何可用的憑據,鼠兔重試8080連接直到錯誤出現:

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 

它是某種錯誤的?還是我做的不對的東西嗎?

回答

1

已映射本地主機:8080泊塢窗容器的(新rabbitmg)端口15672,這實際上是端口WebUI的管理。對於AMQP通信的端口是5672或5671.