2014-10-30 1 views
0

RabbitMQ를 사용하면 두 가지 유형의 소비자가 있습니다. FileConsumer는 파일에 메시지를 쓰고 MailConsumer 메일 메시지를 보냅니다. 각 유형의 소비자가 여러 명일 수 있습니다 (예 : MailConsumers를 실행하는 세 명과 FileConsumer 인스턴스를 한 명).작업 대기열 동작으로 여러 대기열에 게시하는 방법은 무엇입니까?

내가 할 수있는 방법이 :

각 게시 된 메시지 (있는 경우 정확히 하나의 FileConsumer 인스턴스 하나 개 MailConsumer 인스턴스가 메시지를 게시이
  • , 한 번 각 큐하지 한 번 수행해야합니다 의해 처리되어야한다
    • 연결된 사용자가없는 경우 소비까지) 가능
    • 메시지는 내가 t를 얻기 위해 사용해야 교환 등 어떤 종류의

  • 을 삭제되지, 대기해야 그의 행동? 이 예제를 명확히하기 위해 일부 예제/의사 코드를보고 싶습니다.

    queues

    이 쉽게 할 수 있어야하지만이 문서에서 그것을 알아낼 수 없었다. fanout example이 작동해야하지만, 나는이 메시지가 각 소비자에게 동일한 메시지를 보내는 것처럼 보이는 "익명 대기열"과 혼동합니다.

    답변

    2

    auto-delete 플래그없이 대기열을 생성하면 대기열은 소비자 연결이 끊긴 후에도 계속 유지됩니다.

    대기열을 영구으로 선언하면 브로커를 다시 시작한 후에도 대기열에 있음을 유의하십시오.

    delivery-mode=2 속성 집합 (메시지가 지속됨을 의미 함)이있는 메시지를 게시하면 해당 메시지는 브로커를 다시 시작한 후에도 지속적 (대기열을 영구 유지하는 것이 중요합니다) 대기 상태를 유지합니다.

    fanout 교환 유형 사용은 필수가 아닙니다. 필요한 경우 메시지 라우팅 처리를 위해 topic을 사용할 수도 있습니다.

    UPD : 스키마로 보여주는 것을 얻는 단계별 방법.

    1. exchange.declare(exchange-name=main, type=fanout, durable=true)로, main 말, 지속적인 교류를 선언합니다.
    2. Delcare 개의 큐 양쪽 큐 queue.bind(queue-name=files, exchange-name=main)queue.bind(queue-name=mails, exchange-name=main)로 교환, queue.declare(queue-name=files, durable=true)queue.declare(queue-name=mails, durable=true)
    3. 귀속과 같은 filesmails 말한다. 당신이 main 교환에 메시지를 게시 할 수있는이 시점에서

    (약 delivery-mode 위주의 참조) files에서 FileConsumerMailConsumermails에서, 큐에서 어떤 소비자의 번호를 소모한다. 대기열에있는 모든 사용자가 없으면 메시지는 대기 상태가되고 소비 될 때까지 대기열에 남아 있습니다 (또는 브로커를 다시 시작하면 지속성이 유지되지 않습니다).

    +0

    좋습니다. 도움이됩니다. 하지만 게시자와 소비자를 설정하는 방법에 대한 자세한 내용이 필요하므로 질문과 유사하게 작동합니다. –

    +0

    다이어그램과 같은 단계로 수정되었습니다. 실제 코드는 사용하는 클라이언트 라이브러리 및 플랫폼에 따라 다릅니다. – pinepain