2013-10-11 2 views
1

대기열에 게시 할 요청이 많습니다.모든 가입자가 완료되면 어떻게 알 수 있습니까?

각자의 라운드 로빈 풀에 각각 여러 가지 다른 구독자 유형이 있습니다.

예를 들어 Request1 큐 이들의 하나만이 상기 요청을 얻을 수 있도록하고 LoggingSubscriber1 LoggingSubscriber2가 모두 "LoggingSubscriber"subscriptionId으로 가입

으로 푸시된다.

는 DoProcessSubscriber1, DoProcessSubscriber2 및

DoProcessSubscriber3

그리고 다른 DoOtherProcessSubscriber1, DoOtherProcessSubscriber2

우리는 세 가입자 (로깅, DoProcess 및 DoOtherProcess)을 완료했는지 알 수있는 방법이 필요합니다 같은 다른 그룹이 될 것입니다 모든 요청이 완료되었다는 메시지를 클라이언트에 보내는 것과 같은 몇 가지 작업을 수행 할 수 있습니다.

어떻게 이러한 응답을 수집합니까? 우리는 각 가입자가 큐에 응답 객체를 넣을 것을 생각하고 있었지만 여전히 완료되었는지를 알 수는 없습니다.

+0

RequestObject에서 어떤 종류의 카운터를 사용하는 것이 좋습니다. 따라서 각 구독자는 작업이 완료되면 바로 증가시킬 것이므로이 카운터를 예상 값과 비교하여 (사용자 - 3)이를 결정할 수 있습니다. 이 카운터가 멀티 스레드 환경에서 공유 가능한 리소스가 될 것임을 잊지 마십시오. 동기화가 필요합니다. –

+0

하드 코딩 된 값을 원하지 않습니다. 다른 가입자 유형을 추가하면 이상적으로 구성을 수정해야합니다. 값. 나는 모든 가입자가 정확한 답변을 할 때까지 항목이 대기열에 있다고 믿는다. 그 당시에 어떤 일이 일어날 수있는 방법이 없었습니까? – CaffGeek

+0

귀하의 목록에있는 구독자 수를 알고 계시 겠지만 - 하드 코딩 된 값과 비교하지는 않지만이 길이가 –

답변

1

IdeNetQ에 내장 된 요청/응답 패턴을 사용하는 것이 가장 이상적이지만 이상적인 단일 소비자를 위해 설계되었습니다. 여러 대기열에 바인딩 할 수 없습니다. 귀하의 경우에는 클라이언트가 응답 구독을 설정하고 세 가지 서비스가 모두 완료되면 메시지를 게시하게해야합니다. 클라이언트는 업데이트 전에 세 가지 모두의 응답이있을 때까지 기다릴 수 있습니다.

그러나 디자인을 다시 생각해 보시기 바랍니다. 클라이언트가 가입자의 완료를 인정할 책임을지게 됨으로써 매우 밀접하게 결합 된 시스템을 구축하게됩니다. 메시징 시스템 디자인은 최종 일관성이라는 개념을 채택하는 경우 훨씬 효과적입니다. 클라이언트가 화재 및 잊어 버림을 허용하고 예상되는 모든 처리가 결국 발생했는지 확인하는 감사 프로세스를 갖도록하십시오.

관련 문제