pika rabbitmq python 3.6 - PullRequest
       12

pika rabbitmq python 3.6

0 голосов
/ 13 февраля 2020

Я пытаюсь использовать pika для соединения с rabbitmq

def get_connection():
    credentials = pika.PlainCredentials(MQ_USER, MQ_PASS)
    connection = pika.BlockingConnection(pika.ConnectionParameters(MQ_SERVER, 5672, '/', credentials))
    return connection

Я могу использовать эти учетные данные с rabbitmqctl, вывод выглядит примерно так:

# rabbitmqctl authenticate_user user pass
Authenticating user "user" ...
Success

Я также пытался просто использовать строки со значениями внутри функции и получить ту же ошибку. У меня также есть te lnet доступ к порту rabbitmq, и пользователь имеет доступ к каналу.

При выполнении кода python я получаю эту ошибку:

Internal Server Error: /api/analysis/stream/finish/
Traceback (most recent call last):
  File "/path/to/api/venv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/path/to/api/venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/path/to/api/venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/path/to/api/core/views.py", line 2465, in record_finsh
    inform_process(video.filename)
  File "/path/to/api/core/views.py", line 702, in inform_process
    con = get_connection()
  File "/path/to/api/base/rabitmq.py", line 7, in get_connection
    connection = pika.BlockingConnection(pika.ConnectionParameters(host=MQ_SERVER, port=5672, virtual_host='/', credentials=credentials))
  File "/path/to/api/venv/lib/python3.6/site-packages/pika/adapters/blocking_connection.py", line 360, in __init__
    self._impl = self._create_connection(parameters, _impl_class)
  File "/path/to/api/venv/lib/python3.6/site-packages/pika/adapters/blocking_connection.py", line 451, in _create_connection
    raise self._reap_last_connection_workflow_error(error)
pika.exceptions.AMQPConnectionError

Это выглядит мне нравится, что что-то происходит в этой строке credentials = pika.PlainCredentials(MQ_USER, MQ_PASS), даже если ошибка в следующей строке. Что именно делает эта функция? Есть идеи, что я делаю не так?

РЕДАКТИРОВАТЬ: Я сказал, что я думаю, что ошибка в этой строке credentials = pika.PlainCredentials(MQ_USER, MQ_PASS), потому что, если я добавлю что-то вроде:

def get_connection():
    credentials = pika.PlainCredentials(MQ_USER, MQ_PASS)
    exit()
    connection = pika.BlockingConnection(pika.ConnectionParameters(MQ_SERVER, 5672, '/', credentials))
    return connection

Я все еще получаю более или менее ту же ошибку:

Internal Server Error: /api/analysis/stream/finish/
Traceback (most recent call last):
  File "/path/to/api/venv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/path/to/api/venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/path/to/api/venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/path/to/api/core/views.py", line 2465, in record_finsh
    inform_process(video.filename)
  File "/path/to/api/core/views.py", line 702, in inform_process
    con = get_connection()
  File "/path/to/api/base/rabitmq.py", line 7, in get_connection
    return 0
  File "/path/to/api/venv/lib/python3.6/site-packages/pika/adapters/blocking_connection.py", line 360, in __init__
    self._impl = self._create_connection(parameters, _impl_class)
  File "/path/to/api/venv/lib/python3.6/site-packages/pika/adapters/blocking_connection.py", line 451, in _create_connection
    raise self._reap_last_connection_workflow_error(error)
pika.exceptions.AMQPConnectionError

Из-за этого я также попытался заменить фактическими значениями, такими как credentials = pika.PlainCredentials('user', 'mq@pass'), и также получить тот же результат.

EDIT2: Ответ на комментарии ниже.

def get_connection():
    credentials = pika.PlainCredentials('user', 'mq@passwd')
    connection = pika.BlockingConnection(pika.ConnectionParameters('172.x.y.z', 5672, '/', credentials))
    return connection

Возвращает ту же проблему. Rabbit MQ работает по удаленному IP. Я уже проверил и могу lnet к IP.

1 Ответ

0 голосов
/ 14 февраля 2020

pika.exceptions.AMQPConnectionError повышается, когда host не доступен для pika.

В случае недействительных учетных данных, pika повышает:

pika.exceptions.ConnectionClosedByBroker: (403, 'ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.')

для недопустимый виртуальный хост:

pika.exceptions.ConnectionClosedByBroker: (530, 'NOT_ALLOWED - vhost / not found')

Проверьте правильность предоставленного значения host или port.

Ссылка: pika docs

...