代码之家  ›  专栏  ›  技术社区  ›  Hank Gay

rabbitmq在尝试遵循芹菜教程时给出“拒绝访问,拒绝用户登录”错误。

  •  4
  • Hank Gay  · 技术社区  · 16 年前

    我正试图跟随 celery tutorial 但是我跑步时遇到了一个问题 python manage.py celeryd :我的rabbitmq服务器(安装在我的dev设备上的虚拟机上)不允许我的用户登录。

    我在Django管理控制台上得到以下信息:

    [ERROR/MainProcess] AMQP Listener: Connection Error: Socket closed. Trying again in 2 seconds...
    

    这个出现在我的 rabbit.log 我的rabbitmq服务器上的文件:

    exception on TCP connection <0.5814.0> from $DJANGO_BOX_IP
    {channel0_error,starting,{amqp,access_refused,"login refused for user '$CONFIGURED_USER'",'connection.start_ok'}}
    

    我再次检查了我的用户、权限和vhost信息,它们似乎都匹配。非常感谢您提供任何帮助和故障排除。

    更新:按照@asksol的建议,我得到以下跟踪:

    $MY_VIRTUAL_ENV/lib/python2.6/site-packages/carrot/connection.pyc in connection(self)
        118             return
        119         if not self._connection:
    --> 120             self._connection = self._establish_connection()
        121             self._closed = False
        122         return self._connection
    
    $MY_VIRTUAL_ENV/lib/python2.6/site-packages/carrot/connection.pyc in _establish_connection(self)
        131 
        132     def _establish_connection(self):
    --> 133         return self.create_backend().establish_connection()
        134 
        135     def get_backend_cls(self):
    
    $MY_VIRTUAL_ENV/lib/python2.6/site-packages/carrot/backends/pyamqplib.pyc in establish_connection(self)
        110                                insist=conninfo.insist,
        111                                ssl=conninfo.ssl,
    --> 112                                connect_timeout=conninfo.connect_timeout)
        113 
        114     def close_connection(self, connection):
    
    $MY_VIRTUAL_ENV/lib/python2.6/site-packages/amqplib/client_0_8/connection.pyc in __init__(self, host, userid, password, login_method, login_response, virtual_host, locale, client_properties, ssl, insist, connect_timeout, **kwargs)
        138                 self.wait(allowed_methods=[
        139                     (10, 20), # secure
    --> 140                     (10, 30), # tune
        141                     ])
        142 
    
    $MY_VIRTUAL_ENV/lib/python2.6/site-packages/amqplib/client_0_8/abstract_channel.pyc in wait(self, allowed_methods)
         88         method_sig, args, content = self.connection._wait_method(
    ---> 89             self.channel_id, allowed_methods)
         90 
         91         if content \
    
    $MY_VIRTUAL_ENV/lib/python2.6/site-packages/amqplib/client_0_8/connection.pyc in _wait_method(self, channel_id, allowed_methods)
        196         while True:
        197             channel, method_sig, args, content = \
    --> 198                 self.method_reader.read_method()
        199 
        200             if (channel == channel_id) \
    
    $MY_VIRTUAL_ENV/lib/python2.6/site-packages/amqplib/client_0_8/method_framing.pyc in read_method(self)
        213         m = self.queue.get()
        214         if isinstance(m, Exception):
    --> 215             raise m
        216         return m
        217 
    
    IOError: Socket closed
    
    1 回复  |  直到 16 年前
        1
  •  5
  •   asksol    16 年前

    你在经营Django吗? 如果是,请尝试以下操作:

    >>> from carrot.connection import DjangoBrokerConnection
    >>> c = DjangoBrokerConnection()
    >>> c.connection
    

    是不是也一样? 您确定要连接到正确的主机名,并且用户名和密码可以访问虚拟主机吗?

    更新:

    >>> from carrot.connection import DjangoBrokerConnection
    >>> c = DjangoBrokerConnection()
    >>> for n in ("host", "userid", "password", "virtual_host", "ssl"):
    ...     print("%s -> %s" % (n, repr(getattr(c, n, None))))
    

    更新:您必须在运行c.connection之前完成上述操作,因为连接是在carrot中缓慢建立的。

    推荐文章