2017-08-20 16 views
12

Chciałbym wykorzystać Celery'ego (z RabbitMQ jako backend MQ) do wykonywania zadań o różnych smakach za pośrednictwem różnych Kolejek. Jednym z wymogów jest to, że konsumpcja (przez pracowników) z określonej kolejki powinna umożliwiać jej wstrzymanie i wznowienie.Pracownik nie zajmuje się zadaniami po selerze numer jeden nazywa się

Seler, wydaje się mieć this capability poprzez wywołanie add_consumer i cancel_consumer. Chociaż mogłem anulować zużycie zadań z kolejki dla konkretnego pracownika, nie mogę zmusić pracownika do wznowienia zużycia przez wywołanie add_consumer. The code to reproduce this issue is provided here. Przypuszczam, że brakuje mi jakiegoś parametru, który powinien być dostarczony w celeryconfig lub za pomocą argumentów przy rozpoczynaniu pracy?

Byłoby wspaniale, aby uzyskać świeże pary oczu na ten temat. Nie ma zbyt wielu dyskusji na temat Stackoverflow dotyczących add_consumer ani Github. Mam więc nadzieję, że jest tu kilku ekspertów gotowych podzielić się swoimi przemyśleniami/doświadczeniem.

-

Używam poniżej:

system operacyjny Windows, RabbitMQ 3.5.6, Erlang 18,1, Python 3.3.5, seler 3.1.15

Odpowiedz

2

Aby wznowić z kolejki, ty trzeba podać nazwę kolejki, a także pracowników docelowych. Oto jak to zrobić.

app.control.add_consumer(queue='high', destination=['[email protected]']) 

Oto add_consumer podpis

def add_consumer(state, queue, exchange=None, exchange_type=None, 
      routing_key=None, **options): 

W twoim przypadku, dzwonisz z

app.control.add_consumer('high', destination=['[email protected]']) 

So high jest uzyskiwanie przekazany do państwa, a kolejka jest pusta. Więc nie jest w stanie wznowić.

+0

Dzięki za próbę. Istotą wielu plików, które zapewniłem do odtworzenia tego zachowania, jest użycie add_consumer. Podczas gdy pracownik potwierdza wykonanie polecenia add_consumer, nie wznawia konsumpcji zadań w kolejce. Podejrzewam, że mój celeryconfig nie jest prawidłowo ustawiony lub istnieje potencjalny błąd w selerze. – teng

+0

@teng Czy próbowałeś z 'queue = high' podczas dodawania konsumenta? Użyłem twojego sedna i powtórzyłem zachowanie. Po przejściu odpowiednich parametrów działa poprawnie. – ChillarAnand

+0

Dodałem 'queue = high' jako kwarg do add_consumer, przeciwstawiając się tylko arg, a po wykonaniu resume.py, pracownik nadal nie wykonuje zadań. Czy mógłbyś powiedzieć mi, jaki jest twój system operacyjny i wersje rabbitmq i selera, których używasz? – teng