2014-02-07 2 views
1

나는 RabbitMQ 클러스터가있는 상황이 있습니다. 여러 데이터를 생성하는 여러 제작자가 있습니다. 각 제작자가 매개 변수를 기반으로 임시 대기열을 설정하고 대기열이없는 경우 대기열을 제거하도록합니다.대기열에 메시지를 보내도록 내부 교환을 설정할 수 있습니까?

예 생산자 A와 B의 경우 :

A ----- tmp_a_queue 

B ----- tnp_b_queue 

나는 시스템의 규모 처리량이 작업을 수행 할 수. 다음으로는 소비자가 소비 할 수있을 때 하나의 대기열을 만들고 두 대기열에서 메시지를 가져 오려고합니다.

위의 템플릿에 소비자 C를 추가하는 예를 들어

:

      _______________________ 
A ----- tmp_a_queue\  |      | 
        ====| SOME MAGIC GOES HERE |-----tmp_c_queue C 
B ----- tnp_b_queue/  |_______________________| 

나는 A, BC를 만드는 방법을 알고있다.

질문 :

되어이 설정에 왼쪽에있는 tmp_queues의 모든 메시지를 잡아 것이라고하는 방식으로 internal-exchange 어떤 종류의 것이 가능하다 (그들이 와서 동적으로 이동 주)와 보내 소비자가 사용 가능한 경우에만 소비자 대기열 (오른쪽)으로 이동합니까?

+1

나는 각각의 동적으로 생성 된 대기열에 동적으로 인스턴스화 된 전달자 프로세스가 메시지를 전달할 책임이 있다고 생각합니다. 각 동적 대기열이 게시하는 "체크인"대기열을 추가하여 새로운 대기열이 표시 될 때 "매직"프로세스가 어디 있는지 알 수 있습니다. –

+0

예, 이것에 대해서도 생각하고있었습니다. 내부 exchanges가 어떻게 든 도움이 될지 아십니까? – Vor

+1

그게 내가 일하는 교환을 이해하는 방법은 아니야. (내가 의도적으로 대답으로 게시하는 것을 피하고 있지만, 지식이 부족한 사람들을 보지 못하도록 메시지 대기열에 대해 잘 알고 있지 않기 때문에 이 질문. 하나의 메시지를 가져 와서 여러 큐 (바인딩 또는 주제를 기반으로)에 배포 할 수 있다는 생각에 [Exchange가 작동하는 것 같습니다] (http://rubyamqp.info/articles/working_with_exchanges/#using_the_publisher_confirms_extension_to_amqp_091), 여기 다른 대기열처럼 들리는 역방향을 시도하고 있습니다. –

답변

1

교환기가 메시지를 "소비"하도록하려면 Shovel 플러그인을 사용하면됩니다. 대기열은 교환에 등록 (바인딩)하고 그렇지 않으면 등록하지 않습니다.

주제가 있습니다. tmp_queue_c를 *로 바인딩하고 나머지는 각각의 바인딩 키로 바인딩하십시오. 그러나이 시나리오에서는 다른 대기열에 여전히 메시지가 있습니다 (누군가가 교환 이외의 메시지를 사용하지 않는 한 소모되지 않습니다).

편집 : 귀하의 경우에 유용하다고 판단되는 교환 교환 바인딩에도 found this link이 있습니다. 이 시나리오에서는 보통 교환을 tmp_a_queuetmp_b_queue으로 게시하지만 다른 교환 magic은 2 번째 첫 번째 대기열에 바인딩 된 동일한 교환에 바인딩됩니다. 그런 다음 tmp_c_queuemagic 교환에 바인딩하면 원하는 동작을 얻을 수 있습니다.

관련 문제