2014-05-21 3 views
0

RabbitMQ를 사용하여 시스템을 작성하고 있습니다. tutorial에 설명 된대로 작업 대기열에 이미 사용했습니다. 아주 쉽고 간단합니다. 대기열에 메시지를 게시 할 때 누가 처리할지 알 수 있습니다. 생산자와 소비자는 일대일 관계로 결합되었습니다 (지금까지는 괜찮 았음).RabbitMQ 라우팅, 주제 및 배포 작업

은 이제 더 복잡한 물건 (소비자와 생산자 사이의 N-m 관계를) 수행 할 :

  • 생산자가 함께 할 것입니다 무엇을 모르고, 메시지를 게시 할 수 있습니다. 우리는 (의 3 개 통계 소비자와 2 개 로깅 소비자를 가정 해 봅시다) 실행을 입력 소비자의 여러 인스턴스를 가질 수
  • (예, 통계 및 로깅)을 동일한 메시지에 다른 물건을 (보내는 이벤트)
  • 다른 소비자 유형
  • 나는이 문서를 읽으면서
  • 모든 메시지는 모든 소비자 유형
  • 모든 메시지는 모든 소비자 유형에 따라 한 번에 처리되어야합니다 (경쟁 소비자)

에 의해 처리 될 수있다, 나는 특히, 그것을 구현하는 방법을 잘 모르겠습니다 마지막 지점 (경쟁 소비자) I 말하는. 라우팅 키, 주제 및 교환에 대해 혼란 스럽습니다. 모니터링 요구를 위해 예측 가능한 큐 이름을 갖고 싶습니다.

도움 주셔서 감사합니다.

1) 당신은 경로의 모든 이벤트에 하나의 "항목"교환을 만들 :이 작업을 수행하는 몇 가지 방법이있다

+0

이 질문이 같은지 아닌지, 특히 "모든 메시지를 한 번씩 모든 소비자 유형별로 처리해야합니다"부분에 대해 잘 모르겠습니다. http://stackoverflow.com/questions/12686868/rabbitmq- amqp-queue-design –

답변

1

. 모든 소비자 유형에 대해 하나의 대기열을 작성하고 라우팅 키 (예 : "type1", "type2"등)를 사용하여 연결합니다. 로깅 큐는 라우팅 키 "#"로 바인드 될 수 있습니다. 즉, 모든 메시지를 수신하게됩니다. 동일한 소비자 유형의 다른 인스턴스는 단일 대기열을 수신 대기해야합니다. 이 방법으로 그들은 "경쟁하는 소비자"로서 행동 할 것입니다. 즉, 각 메시지는 소비자의 한 인스턴스에 의해 처리됩니다 (그러나 여전히 멱등 원을 소비해야합니다).

2) # 1과 유사합니다. 그러나 각 메시지 유형에 대해 하나의 "팬 아웃 (fanout)"교환을 작성한 다음 대기열을 바인드합니다. 로깅 큐는 분명히 각 교환에 바인드되어야합니다. 이것은 더 빠르며 더 나은 제어가 가능하기 때문에 선호되는 (관용적 인 경우조차도) 접근 방식입니다.

관련 문제