2017-02-08 20 views
6

Tôi đã triển khai django(1.10) + celery(4.x) trên cùng một máy ảo, với rabbitmq là nhà môi giới (trên cùng một máy). Tôi muốn phát triển cùng một ứng dụng trên kiến ​​trúc đa nút như tôi có thể sao chép một số nút công nhân và mở rộng các tác vụ để chạy nhanh. Ở đây,Nhiệm vụ Django + Celery trên nhiều nút công nhân

  1. Làm cách nào để định cấu hình cần tây với kiến ​​trúc này?
  2. Trên các nút công nhân khác, thiết lập nào nên là thiết lập?
+1

Giải pháp của ChillarAnand nên giải quyết nó cho bạn. Bạn cần một số điều khác để được làm sáng tỏ? –

Trả lời

8

Bạn nên có borker trong một nút và định cấu hình để công nhân từ các nút khác có thể truy cập vào nút đó.

Để làm điều đó, bạn có thể tạo người dùng/vhost mới trên rabbitmq.

# add new user 
sudo rabbitmqctl add_user <user> <password> 

# add new virtual host 
sudo rabbitmqctl add_vhost <vhost_name> 

# set permissions for user on vhost 
sudo rabbitmqctl set_permissions -p <vhost_name> <user> ".*" ".*" ".*" 

# restart rabbit 
sudo rabbitmqctl restart 

Từ các nút khác, bạn có thể xếp hàng công việc hoặc bạn chỉ có thể chạy công nhân để tiêu thụ công việc.

from celery import Celery 

app = Celery('tasks', backend='amqp', 
broker='amqp://<user>:<password>@<ip>/<vhost>') 

def add(x, y): 
    return x + y 

Nếu bạn có một tập tin (nói task.py) như thế này, bạn có thể xếp hàng lên nhiệm vụ sử dụng add.delay().

Bạn cũng có thể bắt đầu công nhân với

celery worker -A task -l info 

Bạn có thể xem câu trả lời của tôi ở đây để có được một ý tưởng ngắn gọn về cách run tasks on remote machines. Để biết quy trình từng bước, bạn có thể kiểm tra bài đăng tôi đã viết on scaling celery.

Các vấn đề liên quan