2012-04-09 7 views
2

저는 Windows Azure 서비스 버스 (토픽 & 대기열)를 시작하면서 경쟁 소비자 패턴을 구현하려고합니다.Azure 서비스 버스의 경쟁 소비자 메시징 패턴

는 기본적으로, 나는 메시지 생산자 세트 및 메시지 소비자 세트를 갖고 싶어. 일단 메시지가 생성되면, 나는 첫 번째 이용 가능한 소비자가 메시지를 처리하기를 원한다. 다른 어떤 소비자도 메시지를 받아서는 안됩니다.

Azure에서이 작업을 수행 할 수있는 방법이 있습니까?

+0

각 메시지 뒤에 어떤 종류의 작업이 있습니까? 시간 제약은 무엇입니까? –

+0

@Simon 이상적으로 소비자는 메시지가 생성 된 시점으로부터 10-30ms 이내에 메시지 처리를 시작합니다. 생산자가 소비자를 앞지르면, 수요를 충족시키기 위해 더 많은 소비자를 추가 할 것입니다. – JoeGeeky

답변

2

아마도 토픽을 원하지 않고 Brokered Messaging이 될 것입니다.

수신 모드로 PeekLock과 함께 메시지의 레이블 및/또는 콘텐츠 형식 속성을 사용하여 중재 메시지에서 항목과 유사한 기능을 에뮬레이션 할 수 있습니다.

+0

그 뜻은 그냥 큐를 만드는 것입니다; 해당 ReceiveMode를 적절하게 설정합니다. 모든 소비자를 동일한 대기열에 바인딩합니까? 그 맞습니까? – JoeGeeky

+1

네, 맞습니다. PeekLock 메서드를 사용하는 경우 수신자가 응답하려고하는 메시지 유형인지 확인하기 위해 Label 또는 ContentType을 검사 할 수 있습니다. 그럴 경우 메시지에서 .Complete()를 호출하고, 그렇지 않으면 .Abandon()을 호출하십시오. 버려지고 짧은 잠금이 만료되면 다른 대기열 사용자가 메시지를 처리 ​​할 수 ​​있습니다. 작업이 완료되면 대기열에서 영구적으로 제거됩니다. – Zack

1

주제는 중개 메시징의 기능이지만 일대 다 "게시/가입"패턴입니다. 대기열은 일대일 메시지 통신입니다. 그래서 예, 단순히 대기열을 사용해야하는 것 같습니다. 또한 http://msdn.microsoft.com/en-us/library/hh689723(VS.103).aspx을 참조하십시오.

+0

대기열은 메시지가 하나의 수신자에게 전달된다는 점에서 일대일 메시지 통신입니다. 그러나 동일한 대기열에서 동시에 여러 수신자가 수신 대기하는 것을 방지하여 사용자가 언급 한 시나리오를 가능하게합니다. –

3

심플. 하나의 대기열에서 동시에 수신하는 두 개 (또는 그 이상)의 수신기를 만들면 완료됩니다. 검색된 메시지는 메시지가 수집 될 때 메시지 로그상의 커서가 앞당겨지기 때문에 해당 수신자 중 하나에 정확하게 도달합니다. 경쟁하는 소비자는 네트워크 대기열의 고유 한 기능이므로 특별한 것이 필요하지 않습니다.

반대의 경우 - 각 메시지는 각 소비자에게 전달됩니다 - 소비자마다 가입을 선택하면 다른 수신자와 독립적으로 이동할 수있는 메시지 로그 위에 격리 된 사용자가됩니다. 발 차기에는 분명히 경쟁중인 소비자도 가입 할 수 있습니다.

클레멘스

+0

잘 모르겠습니다. 구독시 경쟁 소비자를 확보하는 방법을 알고 있습니다. 필터를 사용하여이 작업을 수행 할 수 있습니까? 좀 더 설명하거나 더 많은 정보를 가리킬 수 있습니까? –