【问题标题】:WSL: ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: Socket closedWSL:错误/MainProcess] 消费者:无法连接到 amqp://guest:**@127.0.0.1:5672//:套接字已关闭
【发布时间】:2023-03-14 10:57:01
【问题描述】:

我无法使用 celery 和 WSL 打开套接字。

查看以下信息:

  • [ ] celery -A proj report 的输出:
software -> celery:3.1.26.post2 (Cipater) kombu:3.0.37 py:3.6.7
            billiard:3.3.0.23 py-amqp:1.4.9
platform -> system:Linux arch:64bit, ELF imp:CPython
loader   -> celery.loaders.app.AppLoader
settings -> transport:pyamqp results:disabled
BROKER_URL: 'amqp://guest:********@localhost:5672//'
  • [ ]pip freeze 的内容在问题中。

我正在使用 pipenv。点子文件:

[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
django = "*"
django-allauth = "*"
django-crispy-forms = "*"
django-debug-toolbar = "==1.10."
numpy = "==1.15.3"
colorama = "==0.4.0"
dateparser = "==0.7.0"
django-extensions = "*"
python-binance = "*"
misaka = "*"
django-celery = "*"
celery = "*"

[requires]
python_version = "3.6"

复制步骤

我在 WSL:

  1. sudo apt-get install rabbitmq-server

  2. sudo service rabbitmq-server restart

  3. chmod -R 777 ./ ## 否则我没有权限

其他信息

tasks.py:

from celery import Celery

# app = Celery('tasks', broker='amqp://jm-user1:sample@localhost/jm-vhost')
# app = Celery('tasks', broker='amqp://guest@localhost//')
app = Celery('tasks', broker='pyamqp://guest@localhost//')

@app.task
def add(x, y):
    return x + y

rabbitmqctl 状态:

[{pid,1716},
 {running_applications,
     [{rabbit,"RabbitMQ","3.6.10"},
      {ranch,"Socket acceptor pool for TCP protocols.","1.3.0"},
      {ssl,"Erlang/OTP SSL application","8.2.3"},
      {public_key,"Public key infrastructure","1.5.2"},
      {asn1,"The Erlang ASN1 compiler version 5.0.4","5.0.4"},
      {rabbit_common,
          "Modules shared by rabbitmq-server and rabbitmq-erlang-client",
          "3.6.10"},
      {xmerl,"XML parser","1.3.16"},
      {crypto,"CRYPTO","4.2"},
      {os_mon,"CPO  CXC 138 46","2.4.4"},
      {compiler,"ERTS  CXC 138 10","7.1.4"},
      {mnesia,"MNESIA  CXC 138 12","4.15.3"},
      {syntax_tools,"Syntax tools","2.1.4"},
      {sasl,"SASL  CXC 138 11","3.1.1"},
      {stdlib,"ERTS  CXC 138 10","3.4.3"},
      {kernel,"ERTS  CXC 138 10","5.4.1"}]},
 {os,{unix,linux}},
 {erlang_version,
     "Erlang/OTP 20 [erts-9.2] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:192] [kernel-poll:true]\n"},
 {memory,
     [{total,55943096},
      {connection_readers,0},
      {connection_writers,0},
      {connection_channels,0},
      {connection_other,0},
      {queue_procs,2744},
      {queue_slave_procs,0},
      {plugins,0},
      {other_proc,19080304},
      {mnesia,65712},
      {metrics,184888},
      {mgmt_db,0},
      {msg_index,42728},
      {other_ets,1769840},
      {binary,62120},
      {code,21390833},
      {atom,891849},
      {other_system,12634158}]},
 {alarms,[]},
 {listeners,[{clustering,25672,"::"},{amqp,5672,"::"}]},
 {vm_memory_high_watermark,0.4},
 {vm_memory_limit,6791299072},
 {disk_free_limit,50000000},
 {disk_free,100481589248},
 {file_descriptors,
     [{total_limit,924},{total_used,2},{sockets_limit,829},{sockets_used,0}]},
 {processes,[{limit,1048576},{used,165}]},
 {run_queue,0},
 {uptime,4073},
 {kernel,{net_ticktime,60}}]

输出:

运行时:celery -A tasks worker --loglevel=info 我得到以下输出:

 -------------- celery@Alvaro-Laptop v3.1.26.post2 (Cipater)
---- **** -----
--- * ***  * -- Linux-4.4.0-17763-Microsoft-x86_64-with-Ubuntu-18.04-bionic
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app:         tasks:0x7fd7952bcf60
- ** ---------- .> transport:   amqp://guest:**@localhost:5672//
- ** ---------- .> results:     disabled://
- *** --- * --- .> concurrency: 12 (prefork)
-- ******* ----
--- ***** ----- [queues]
 -------------- .> celery           exchange=celery(direct) key=celery


[tasks]
  . tasks.add

[2019-01-23 08:38:30,538: ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: Socket closed.
Trying again in 2.00 seconds...

[2019-01-23 08:38:32,543: ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: Socket closed.
Trying again in 4.00 seconds...

如何打开套接字以允许通信?

【问题讨论】:

    标签: rabbitmq celery windows-subsystem-for-linux


    【解决方案1】:

    检查rabbitmq 是否启动并运行。启用管理控制台:

    sudo rabbitmq-plugins enable rabbitmq_management
    

    然后使用访客/访客作为凭据访问http://localhost:15672。查找概览页面>端口和上下文。

    如果 AMQP 绑定到 IPv6 (::),则可能是问题所在。打开rabbitmq服务器配置:

    sudo vi /etc/rabbitmq/rabbitmq-env.conf 
    

    并注释掉

    # By default RabbitMQ will bind to all interfaces, on IPv4 and IPv6 if
    # available. Set this if you only want to bind to one network interface or#
    # address family.
    NODE_IP_ADDRESS=127.0.0.1
    

    然后重启服务:

    sudo service rabbitmq-server restart
    

    并再次检查与 RabbitMQ 的连接

    【讨论】:

    • 谢谢。我将rabbitmq mgmt 端口与实际的ampq 代理混淆了:'(
    • 我在带有 wsl2 的 Windows 上收到 Error: connect ECONNREFUSED 127.0.0.1:5672,取消注释 NODE_IP_ADDRESS=127.0.0.1 工作,谢谢。
    • 非常感谢!我在 WSL 上安装 rabbitmq-server 并且无法连接到服务器,尽管我多次重启服务器。但是,我找不到您的回答中提到的 /etc/rabbitmq/rabbitmq-env.conf。相反,我创建一个新文件/etc/rabbitmq/rabbitmq-env.conf,在其中添加两个条目:listeners.tcp.default = 5672 listeners.tcp.local = 127.0.0.1:5672,问题就解决了。
    【解决方案2】:

    我能够使用 Redis 而不是 Rabbitmq 配置所有内容:

    sudo apt-get install redis-server
    sudo service redis-server restart
    pip install celery
    chmod -R 777 ./
    

    将文件tasks.py放在你想要执行worker的任何文件夹中:

    from celery import Celery
    
    app = Celery('tasks', broker='redis://localhost:6379')
    
    @app.task
    def add(x, y):
        return x + y
    

    然后执行以下:

    celery -A tasks worker --loglevel=info
    

    套接字现在打开了!

    【讨论】:

      【解决方案3】:

      我遇到了完全相同的问题,当我在 Medium 上关注“Django,计划任务和队列(第 2 部分)”文章时,我也有一个正在运行的 rabbitMQ 服务器,但我的 CELERY_BROKER_URL 在设置中是amqp://username:password@192.168.0.38//,这反过来是不正确的。我使用instructions 重新配置了我的 rabbitMQ 服务器。希望对你也有帮助)

      【讨论】:

        【解决方案4】:

        听起来你还没有安装并启动rabbitmq。我发现最简单的方法是使用 docker,但如果您在 WSL 下使用 ubuntu,则可以使用 apt-get 将其安装在 WSL 中,请遵循 these instructions

        【讨论】:

        • 正如问题所言,当我运行rabbitmqctl status 时,它显示了服务器的良好响应
        • 它看起来像是在 ipv6 :: 而不是在 ipv4 localhost 上监听。您可以尝试为 127.0.0.1 配置它吗?
        • 如何更改配置?
        猜你喜欢
        • 2019-11-09
        • 2020-03-12
        • 2019-01-10
        • 2020-12-30
        • 2018-01-22
        • 2018-10-24
        • 2023-01-10
        • 2018-10-17
        • 2020-06-07
        相关资源
        最近更新 更多