首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >pika rabbitmq python 3.6

pika rabbitmq python 3.6
EN

Stack Overflow用户
提问于 2020-02-14 01:54:10
回答 1查看 832关注 0票数 0

我正在尝试使用pika与rabbitmq连接。

代码语言:javascript
运行
复制
def get_connection():
    credentials = pika.PlainCredentials(MQ_USER, MQ_PASS)
    connection = pika.BlockingConnection(pika.ConnectionParameters(MQ_SERVER, 5672, '/', credentials))
    return connection

我可以在rabbitmqctl中使用这些凭据,输出如下:

代码语言:javascript
运行
复制
# rabbitmqctl authenticate_user user pass
Authenticating user "user" ...
Success

我还尝试在函数中仅使用带有值的字符串,但得到了相同的错误。我还可以在rabbitmq端口上进行telnet访问,并且用户可以访问该通道。

当执行python代码时,我得到这个错误:

代码语言:javascript
运行
复制
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)这一行,因为如果我添加如下内容:

代码语言:javascript
运行
复制
def get_connection():
    credentials = pika.PlainCredentials(MQ_USER, MQ_PASS)
    exit()
    connection = pika.BlockingConnection(pika.ConnectionParameters(MQ_SERVER, 5672, '/', credentials))
    return connection

我仍然得到或多或少相同的错误:

代码语言:javascript
运行
复制
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:回复下面的评论。

代码语言:javascript
运行
复制
def get_connection():
    credentials = pika.PlainCredentials('user', 'mq@passwd')
    connection = pika.BlockingConnection(pika.ConnectionParameters('172.x.y.z', 5672, '/', credentials))
    return connection

返回相同的问题。Rabbit在远程IP上运行。我已经测试过了,我可以telnet到IP。

EN

回答 1

Stack Overflow用户

发布于 2020-02-14 10:28:01

当pika无法到达host时,将引发pika.exceptions.AMQPConnectionError

在凭证无效的情况下,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')

检查提供的hostport值是否有效。

参考:pika docs

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60213840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档