2012-05-10 6 views
0

JMS에는 대기열 및 주제가 있습니다. 지금까지는 제작자/소비자 시나리오에서 큐를 가장 잘 사용하고 있으며 게시/구독에 주제를 사용할 수 있습니다. 그러나 제 시나리오에서는 두 가지 접근 방식을 결합하여 생산자 - 소비자 - 관찰자 아키텍처를 만드는 방법이 필요합니다.JMS Producer-Consumer-Observer (PCO)

특히이 대기열에서 읽은 대기열의 메시지를 처리하고 다른 대기열 (또는 주제)에 기록하는 일부 대기열 및 작업자에게 작성하는 제작자가 있습니다. 작업자가 작업을 수행 할 때마다 GUI에 알림을 보내고 현재 시스템 상태를 업데이트해야합니다. 작업자와 GUI는 다른 프로세스이므로 간단한 관찰자 패턴을 적용하거나 GUI에 직접 통보 할 수는 없습니다.

대기열 및/또는 주제의 조합을 사용하여이를 실현하는 가장 좋은 방법은 무엇입니까? GUI는 항상 알림을 받아야하지만 큐에서 아무 것도 소비하지 않아야합니까?

JMS를 사용하여이를 직접 해결하고 RMI와 같은 추가 기술을 사용하여 관찰자 파트를 구현하고 싶습니다.

좀 더 구체적인 예를 제공하기 위해 : 나는 기계에 의해 생산 된 패키지 ( PACKAGEQUEUE)와 큐를 가지고

  1. 을 (PackageProducer)
  2. 은 내가 PACKAGEQUEUE에서 패키지를 취하는 노동자는 주소를 추가 한 MAILQUEUE (AddressWorker)
  3. 다른 작업자가 MAILQUEUE을 처리하고 패키지를 우편 (MailWorker)으로 보냅니다.
  4. 2 단계 후 메시지가 MAILQUEUE에 기록 될 때 GUI에 알리고 패키지 상태를 업데이트하려고합니다. 물론 GUI는 MAILQUEUE의 메시지를 소비해서는 안되며 MailWorker 만 메시지를 소비해야합니다.

답변

1

솔루션에 대해 대기열과 주제의 조합을 사용할 수 있습니다.

GUI 응용 프로그램은 주제 (예 : MAILQUEUE_NOTIFICATION)를 구독 할 수 있습니다. 즉, 단계 2에서 PackageProducer은 메시지를 MAILQUEUE에 쓰고 그 메시지의 사본은 MAILQUEUE_NOTIFICATION 주제로 게시되어야합니다. GUI 응용 프로그램이 주제에 등록 했으므로 패키지 상태에 대한 정보가 들어있는 해당 서적을 가져옵니다. GUI는 해당 서적의 내용으로 갱신 될 수 있습니다.

HTH

+0

감사합니다, 하나 더 질문 : 큐와 주제의 조합을 사용하는 것이 필요 아니면 내가 예를 들어, GUI와 MailWorker 모두 가입 후'MAILTOPIC'에'MAILQUEUE'을 변경할 수 있습니다 ? 내가 지금 보지 못하는 어떤 함의가 있습니까? – lanoxx

+0

필요 없음. 대기열 대신 주제를 사용할 수 있으며 GUI와 MailWorker가 주제를 구독합니다. 솔루션에서 MailWorker는 메시지를 처리하고 GUI는 메시지를 볼 것입니다. MailWorker는 실행되지 않아도 발행물을 놓치지 않아야하므로 영구 가입을 생성해야합니다. GUI의 경우 구독 유형을 선택할 수 있습니다. – Shashi

+0

나는 잡기 때문에 GUI와 Worker를 하나의 주제에 등록하면 그 중 하나가 실행되지 않고 메시지가 손실된다는 것을 알 수 있습니다. 별도의 주제와 대기열이있는 동안에는 이런 일이 발생하지 않습니다. 권리? – lanoxx