Tôi có dưới phiên bản của cần tây và RabbitMQ cài đặt -Làm thế nào để đăng một nhiệm vụ trên hàng đợi cần tây-thỏmq trong PHP?
cần tây 3.1.6
RabbitMQ 3.1.1
tôi có thể gửi một nhiệm vụ vào hàng đợi mặc định từ PHP -
//client.php
<?php
require 'celery-php/celery.php';
$c = new Celery('localhost', 'guest', 'guest', '/');
$result = $c->PostTask('tasks.add', array(2,2));
Mô-đun công nhân của tôi ở dạng python -
# tasks.py
from celery import Celery
celery = Celery('tasks', broker='amqp://guest:[email protected]:5672//')
@celery.task(queue='demo', name='add')
def add(x, y):
return x + y
tôi chạy người lao động cần tây và khách hàng như thế này -
# terminal window 1
$ celery -A tasks worker --loglevel=info
# terminal window 2
$ php -f client.php
này hoạt động. Tôi thấy sản lượng dưới đây trong cửa sổ đầu cuối 1:
Received task: tasks.add[php_52b1759141a8b3.43107845]
Task tasks.add[php_52b1759141a8b3.43107845] succeeded in 0.000701383920386s: 4
Nhưng tôi muốn có hàng đợi khác nhau. Đối với một cuộc biểu tình, giả sử tôi chỉ muốn một hàng đợi có tên là demo. Vì vậy, tôi điều hành công nhân cần tây của mình như thế này -
$ celery -A tasks worker --loglevel=info -Q demo
Nhưng nó không hoạt động. Nhiệm vụ không được thực hiện. Tôi đoán có thể là do mã PHP đang đăng tác vụ trên hàng đợi mặc định: cần tây (dường như không phải trên bản giới thiệu hàng đợi).
Làm cách nào để đăng tác vụ của mình lên hàng đợi cụ thể trong PHP? Hãy giúp tôi.
Tôi đoán tôi sẽ thực hiện các tác vụ khác nhau thay vì hàng đợi khác nhau nếu điều trên không thể có. – Hussain
Bạn nên kiểm tra mã nguồn của celery-php để xem có cách nào để chỉ định 'exchange' và' routing_key' của tác vụ hay không. Trong amqp bạn không gửi tin nhắn đến hàng đợi, bạn gửi chúng đến các trao đổi mà sau đó sẽ gửi tin nhắn đến hàng đợi bằng cách khớp với routing_key. Có một thủ thuật: bạn có thể đặt 'exchange =" "' và routing_key thành tên của hàng đợi (ví dụ 'routing_key =" demo "' và nó sẽ gửi thông điệp trực tiếp đến hàng đợi demo, bỏ qua lớp định tuyến. – asksol
I Tôi không hiểu rõ về amqp.Tôi sẽ tìm hiểu kỹ mã nguồn của celery-php và thử những thứ trên Tôi sẽ cho bạn biết về nó. – Hussain