2013-05-03 2 views
0

나는 샐러리 작업자가 rabbitmq에서 처리를 위해 작업을 대기 행렬에서 제거하는 방법과 방법을 제어하고 싶은 유스 케이스로 실행 중입니다. dequeuing은 셀러리 컨텍스트에서 발생하는 외부 이벤트와 동기화되지만 샐러리가 작업의 큐 해제를 제어 할 수있는 유연성을 제공합니까? basic.get가 외부 이벤트를 기반으로 트리거 방식입니다 대신 basic.consumebasic.get외부 이벤트 (이벤트 대기열)를 기반으로 한 대기열에서의 소비

  • 만들기 사용 : 나는 몇 가지 가능성이 아래 조사하기 위해 노력하고. 그러나 셀러리 기본값은 basic.consume (푸시) 의미로 나타납니다. 코어를 직접 수정하지 않고도이 동작을 무시할 수 있습니까?

  • 외부 이벤트가 트리거 될 때 및 작업자가 사용자 지정 원격 제어를 수행합니다. 그러나 문서에서 원격 제어 명령을 사용하여 작업의 큐 해제를 제어하는 ​​방법을 알 수 없습니다.

셀러리를 계속 사용하고 AMQP 위에 사용자 지정 큐 처리 솔루션을 작성하지 않으려 고합니다.

답변

0

리모컨 명령을 사용하면 메시지 큐브에서 메시지를 소비 할 수 있습니다.

celery.control.cancel_consumer('celery') 

명령은 위의

celery.control.add_consumer('celery') 

원격 명령은 특정 근로자에 ​​요청을 보낼 수 있습니다 대상 인수를 받아 기본 셀러리 큐 (큐 해제) 메시지를 소비 중지 모든 근로자 지시

+0

입력 해 주셔서 감사합니다. 원격 제어 명령은 참으로 그럴듯한 옵션처럼 보입니다. 그러나 노동자들은 여전히'prefetch_count> 1'을 사용하여 작업을 소비 할 것입니다. 'prefetch_count = 1'로이 소비자들을 활성화시키는 방법이 있습니까? 특히 나는 a) 소비자 추가 b) 지정된 대기열에서 단일 작업 대기열에서 제외 c) 추가 외부 이벤트가 발생할 때까지 대기열에 대한 소비자 비활성화 –

+0

작업자의 프리 페치 횟수 구성 CELERYD_PREFETCH_MULTIPLIER = 1 – mher

0

두 가지 이색 옵션을 고려해야합니다. (1) 래빗 레이어에서 사용자 지정 교환 유형을 정의합니다. 이렇게하면 어떤 작업이 어떤 대기열로 보내지는지 제어하는 ​​라우팅 규칙을 만들 수 있습니다. (2) 사용자 정의 셀러리 조정자를 정의하십시오. 이렇게하면 대기열에서 작업자 풀로 이동할 때 어떤 작업을 제어 할 수 있습니다.

관련 문제