2012-07-10 4 views
0

java에 생산자 - 소비자 패턴을 쓰려고합니다. 나는 일련의 서로 다른 연결을 통해 많은 서버에 연결된 네트워크 클라이언트입니다. 서버는 다양한 '작업'패킷을 생성하여 모두 하나의 차단 대기열에 저장합니다. 내가하려는 것은 특정 유형의 작업 패킷 만 특정 소비자에게 전달되도록 소비자를 차단하는 것입니다.소비자 필터링을 사용하는 생산자 - 소비자 차단 대기열

예 :

블로킹 큐 작업 패킷 객체들의 세 가지 유형으로 가득
  • : A, B, C
  • 두 소비자 작업 패킷 객체를 기다리고있다. 소비자 1은 A 유형 만 원하고 소비자 2는 B 또는 C 유형 만 사용합니다.

java.util의 표준 클래스가 있습니까? 아니면 자체 클래스를 롤업해야합니까? 또한, 필요한 경우 내 자신을 굴릴 수있는 가장 좋은 방법은 무엇입니까?

미리 감사드립니다.

앤드류 Klofas

+2

차단 대기열과 올바른 소비자에게 패킷을 "라우팅"하는 소비자 사이에 뭔가가 필요합니다. 또는 각 소비자에게 자체 차단 대기열을 제공하고 패킷 유형에 따라 대기열을 채울 수 있습니다. –

+0

차단 대기열을 하나만 사용하는 이유는 무엇입니까? 아니면 '작업 유형'이 불확실한가요? –

+0

유형이 불명확합니다. 제가하고 싶은 일은 특정 작업 유형에 응답 한 소수의 전문 소비자를 확보 한 다음 범용 소비자입니다. –

답변

1

가 java.util에서이 작업을 수행하는 표준 방법은 아니지만, 여기에 심플한 디자인의 :

내가, B는 C가 모든 인터페이스 D를 구현 있으리라 믿고있어

그 A가 Bs와 Cs로 순서가 잘못 처리되는지는 중요하지 않습니다.

정렬 소비자 집합과 함께 하나의 "입력"BlockingQueue가 있어야합니다. 이러한 소비자는 대기열에있는 객체의 유형을 결정하고 실제 작업자가 가져 오는 별도의 유형별 "출력"대기열로 보냅니다. 하나의 대기열 만 필요로하는 제약이 있습니까?

2

표준 JMS로이 동작을 얻을 수 있습니다. 생성자는 JMS 주제에 배치 된 메시지를 작성합니다. 소비자는 필터링 된 가입을 사용하여 주제에 가입합니다. 즉, 구독자 X는 유형 X 메시지 만 가져옵니다. (API에 가입에 대한 추가 정보)

내구재 구독자는 구독자 당 대기열 처리 메시지가 필요합니다.

이것은 pub/sub 모델입니다.