2012-05-16 30 views
11

Tôi đang cố gắng thiết lập cần tây với django và thỏ-mq. Cho đến nay, tôi đã thực hiện như sau:Lỗi kết nối người tiêu dùng với django và cần tây + rabbitmq?

  • cài đặt cần tây từ pip
  • RabbitMQ cài đặt thông qua Debs sẵn từ kho lưu trữ của họ
  • Added một người dùng và vhost để RabbitMQ qua rabbitmqctl, cũng như quyền cho mà người dùng
  • Bắt đầu RabbitMQ-server
  • cài đặt django-cần tây qua pip
  • Thiết lập django-cần tây, bao gồm cả bảng của nó
  • Cấu hình nhiều thứ khác nhau trong settings.py (BROKER_HOST, BROKER_PORT, BROKER_USER, BROKER_PASSWORD, BROKER_VHOST, cũng như nhập djecelery, gọi chức năng cài đặt và thêm nó vào các ỨNG DỤNG CÀI ĐẶT). Tôi đã kiểm tra lại và tất cả các giá trị này là chính xác (ít nhất, người dùng, mật khẩu và vhost là chính xác).

Vì vậy, bây giờ, khi tôi chạy python manage.py celeryd -l info Tôi gặp lỗi kết nối (xem bên dưới). Bất cứ ai có bất kỳ ý tưởng tại sao?

$ python manage.py celeryd -l info 
/usr/local/lib/python2.7/dist-packages/djcelery/loaders.py:108: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setting in production environments! 
    warnings.warn("Using settings.DEBUG leads to a memory leak, never " 
[2012-05-15 18:38:04,486: WARNING/MainProcess] 

-------------- [email protected] v2.5.3 
---- **** ----- 
--- * *** * -- [Configuration] 
-- * - **** --- . broker:  amqp://[email protected]:5672/celeryhost 
- ** ---------- . loader:  djcelery.loaders.DjangoLoader 
- ** ---------- . logfile:  [stderr]@INFO 
- ** ---------- . concurrency: 1 
- ** ---------- . events:  OFF 
- *** --- * --- . beat:  OFF 
-- ******* ---- 
--- ***** ----- [Queues] 
-------------- . celery:  exchange:celery (direct) binding:celery 


[Tasks] 


[2012-05-15 18:38:04,562: INFO/PoolWorker-1] child process calling self.run() 
[2012-05-15 18:38:04,565: WARNING/MainProcess] [email protected] has started. 
[2012-05-15 18:38:07,572: ERROR/MainProcess] Consumer: Connection Error: [Errno 104] Connection reset by peer. Trying again in 2 seconds... 
^C[2012-05-15 18:38:08,434: WARNING/MainProcess] celeryd: Hitting Ctrl+C again will terminate all running tasks! 
[2012-05-15 18:38:08,435: WARNING/MainProcess] celeryd: Warm shutdown (MainProcess) 
[2012-05-15 18:38:09,372: INFO/PoolWorker-1] process shutting down 
[2012-05-15 18:38:09,373: INFO/PoolWorker-1] process exiting with exitcode 0 
[2012-05-15 18:38:09,376: INFO/MainProcess] process shutting down 
+0

Tôi đã gặp vấn đề tương tự –

Trả lời

1

Máy chủ thỏmq của bạn không được bật và/hoặc định cấu hình đúng cách. Xác minh rằng đó là và thử lại - hoặc, tốt hơn, nếu bạn chỉ đang cố gắng để kiểm tra một cái gì đó và bạn đang xếp hàng bất khả tri, đưa ra rabbitmq và bắt đầu sử dụng redis. Việc định cấu hình dễ dàng hơn nhiều.

tôi chỉ cần cắt-và-dán mã này từ một trong những dự án của tôi, và nó hoạt động tốt:

import djcelery 
from datetime import timedelta 

djcelery.setup_loader() 


BROKER_BACKEND = "redis" 
BROKER_HOST = "localhost" 
BROKER_PORT = 6379 
BROKER_VHOST = "0" 

CELERYD_LOG_LEVEL = 'DEBUG' 
CELERY_RESULT_BACKEND = "redis" 
CELERY_TASK_RESULT_EXPIRES = 150000 
REDIS_HOST = "localhost" 
REDIS_PORT = 6379 
REDIS_DB = "0" 
CELERYD_CONCURRENCY = 1 
CELERYD_MAX_TASKS_PER_CHILD = 4 

CELERY_IMPORTS = (
    "apps.app1.tasks", 
    "apps.app2.tasks", 
) 
1

gì BROKER_URL của bạn trông như thế nào trong settings.py?

By RabbitMQ mặc định có một người sử dụng của khách, vì vậy nếu bạn có thể kết nối với

BROKER_URL = "amqp://guest:[email protected]:5672//" 

thì vấn đề là thiết lập của bạn cho RabbitMQs người dùng, mật khẩu, hoặc nhập virtualhost.

12

Sự cố của bạn ở trong số BROKER_URL.

Với thêm VHOST, cấu hình đúng sẽ là:

BROKER_URL='amqp://[email protected]:5672//' 
BROKER_VHOST='/celeryhost' 
+5

Cài đặt 'BROKER_VHOST' không được chấp nhận. Bạn có thể đặt 'VHOST' trong biến' BROKER_URL': 'BROKER_URL = 'amqp: // celeryuser @ localhost: 5672/celeryhost'' –

+1

cho tôi url của người môi giới chỉ làm việc với dấu gạch chéo kép trước vhost: BROKER_URL =' amqp: // celeryuser @ localhost: 5672 // celeryhost ' –

4

Đối với tôi, URL sau kết thúc làm việc: ... @ localhost: 5672/celeryvhost

4

Tôi có vấn đề tương tự với RabbitMQ và vấn đề là người dùng của tôi không được phép tạo thư trong RabbitMQ.

Hãy thử chạy các kịch bản sau trên máy chủ RabbitMQ của bạn với khách người dùng và nếu nó tạo ra một công việc thử nó với người dùng của bạn:

from celery import Celery 

app = Celery('tasks', broker='amqp://radek:**@localhost:5672//') 

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

Nếu bạn có những lỗi tương chỉ cần thiết lập sự cho phép đối với bạn người dùng:

rabbitmqctl set_permissions -p/radek ".*" ".*" ".*" 
Các vấn đề liên quan