2012-03-08 1 views
5

postgres 멀티 테넌트 환경을 만들고 있습니다. 클라이언트 A는 schema_1을 가지고 있고 B는 schema_2를 가지고 있습니다.즉석에서 대기열 큐를 만들 수 있습니까?

이제 모든 클라이언트를 알지 못하므로 데이터를 기반으로 새 스키마를 만드는 간단한 작은 레이크 작업이 있습니다. 임차인 테이블 .. 모든 완벽하게 동적 인 : 새로운 클라이언트를 추가하고, 새로운 세입자를 추가하고, 레이크 세입자를하십시오 : db : migrate .. tada 모든 테이블이 있고 클라이언트는 자신의 작은 세계를 가지고 있습니다. (알 수없는 고객 목록이지만 가입시 레이크가 문제가되지 않습니다.)

모두 좋다 ...
백그라운드 작업을 제외하고.
각 클라이언트마다 다른 대기열을 갖고 싶습니다.

http://blog.kabisa.nl/2010/03/16/dynamic-queue-assignment-for-resque-jobs/은 여전히 ​​하드 코딩 된 큐를 사용합니다. 코드를 작성할 때 알았던 두 가지 중 하나를 골라 낼 수는 있지만 여전히 동적 인 것은 아닙니다.

내 질문은. 고객의 세계를 설명하는 문자열 "tenant_1"이 있습니다.
어떻게 그 문자열을 사용하여 "him"에 대한 작업 만 포함하는 대기열을 만들 수 있습니까?
어떻게 실제 동적 대기열을 만들 수 있습니까?

답변

4

Resque :: Job.create ("client # {client_id}", MyWorker, 3);

이것은 우리에게 유용합니다.

+2

이 큐를 완료 한 후에 어떻게 삭제합니까? 또는 클라이언트 대기열이 1000 개이고 그 중 50 %가 유휴 상태 인 경우 문제가되지 않습니다. – Luccas

8

내가 그랬던 것처럼 누구든지이 질문을 건너 오면 나는 그 소스의 답을 발견했다.

Resque 버전 1.x (stable)은 /lib/resque.rb에 이것을 나열하고 Resque 내부의 Job 모듈에 직접 액세스하는 것보다 더 나은 호출 방법입니다.

# This method is considered part of the `stable` API. 
    def enqueue_to(queue, klass, *args) 

사용하면 완벽하게 작동합니다.

Resque.enqueue_to(:my_queue, MyWorker, :my_argument)