2012-10-17 1 views
3

나는 Heroku에서 호스팅되는 RabbitMQ 백엔드와 함께 장고 셀러리를 사용하고 있습니다.Celery는 RabbitMQ에 다중 대기열을 만듭니다. 기본이 아닌 대기열에는 소비자가 없습니다.

셀러리 문서에서 셀러리는 작업을위한 새로운 대기열을 만들도록 설계된 것입니다. 내 문제는 내가 RabbitMQ 콘솔에 들어갈 때, 기본 큐에만 모든 소비자 (celeryd 인스턴스)가 연결되어있는 것을 볼 수 있습니다. 결과적으로 기본이 아닌 대기열의 모든 작업이 실행되지 않습니다.

셀러리가 명시 적으로 많은 대기열을 생성한다고 명시되어 있기 때문에 여기에 내 설정과 관련하여 매우 기본적인 것이 빠져 있어야합니다. 그럼에도 불구하고, 나는 소비자들에게 '비약적으로 뛰어 다니고'비어 있지 않은 큐를 찾지 못한다. 빈 큐를 찾는다.

이 문제를 해결하는 방법에 대한 아이디어가 있으십니까?

감사합니다.

+0

당신은 셀러리 conf를 게시 할 수 있습니까? – mossplix

+0

'뛰어 다니고'비어 있지 않은 대기열을 찾으십니까? 어떻게 작동합니까 :) 작업자가 -Q 명령 행 옵션을 사용하여 대기하는 큐를 지정해야합니다 (또는 add_consumer 원격 제어 명령을 사용하십시오) – asksol

답변

0

나는 당신과 똑같은 문제를 겪어 왔지만 문서를 파고 들었다. 내가 생각하기에 큐가 자동으로 생성되었다고하더라도, 셀러리 작업자에게 새로부터 소모하기 시작하도록 명시 적으로 알려줄 필요가 있다고 생각한다. 생성 된 대기열.

docs에 따르면 작업자는 하나 이상의 대기열에 명시 적으로 바인딩됩니다. 즉, 작업자를 시작할 때 -Q 인수를 지정하지 않으면 -Q 인수에 값을 제공하면 바인딩 된 "기본"대기열에 바인드됩니다. 그러면 바인드됩니다 당신이 제공하는 특정 대기열에. 이것은 "정의되지 않은"대기열 (또는 나중에 생성 될 대기열)에 작업자를 바인딩 할 수 없다는 것을 의미합니다. 워드 프로세서

: http://docs.celeryproject.org/en/latest/userguide/workers.html#queues

그 당신의 노동자가 새로 만든 큐에서 소모 시작하게 보인다, 당신은 그래서 add_consumer() 메소드를 사용하여이 작업을 수행하기 위해 (런타임에) 그들에게 메시지를 보낼 수 있습니다.