JMS에는 대기열 및 주제가 있습니다. 지금까지는 제작자/소비자 시나리오에서 큐를 가장 잘 사용하고 있으며 게시/구독에 주제를 사용할 수 있습니다. 그러나 제 시나리오에서는 두 가지 접근 방식을 결합하여 생산자 - 소비자 - 관찰자 아키텍처를 만드는 방법이 필요합니다.JMS Producer-Consumer-Observer (PCO)
특히이 대기열에서 읽은 대기열의 메시지를 처리하고 다른 대기열 (또는 주제)에 기록하는 일부 대기열 및 작업자에게 작성하는 제작자가 있습니다. 작업자가 작업을 수행 할 때마다 GUI에 알림을 보내고 현재 시스템 상태를 업데이트해야합니다. 작업자와 GUI는 다른 프로세스이므로 간단한 관찰자 패턴을 적용하거나 GUI에 직접 통보 할 수는 없습니다.
대기열 및/또는 주제의 조합을 사용하여이를 실현하는 가장 좋은 방법은 무엇입니까? GUI는 항상 알림을 받아야하지만 큐에서 아무 것도 소비하지 않아야합니까?
JMS를 사용하여이를 직접 해결하고 RMI와 같은 추가 기술을 사용하여 관찰자 파트를 구현하고 싶습니다.
좀 더 구체적인 예를 제공하기 위해 : 나는 기계에 의해 생산 된 패키지 (PACKAGEQUEUE
)와 큐를 가지고
- 을 (
PackageProducer
) - 은 내가
PACKAGEQUEUE
에서 패키지를 취하는 노동자는 주소를 추가 한MAILQUEUE
(AddressWorker
) - 다른 작업자가
MAILQUEUE
을 처리하고 패키지를 우편 (MailWorker
)으로 보냅니다. - 2 단계 후 메시지가
MAILQUEUE
에 기록 될 때 GUI에 알리고 패키지 상태를 업데이트하려고합니다. 물론 GUI는MAILQUEUE
의 메시지를 소비해서는 안되며MailWorker
만 메시지를 소비해야합니다.
감사합니다, 하나 더 질문 : 큐와 주제의 조합을 사용하는 것이 필요 아니면 내가 예를 들어, GUI와 MailWorker 모두 가입 후'MAILTOPIC'에'MAILQUEUE'을 변경할 수 있습니다 ? 내가 지금 보지 못하는 어떤 함의가 있습니까? – lanoxx
필요 없음. 대기열 대신 주제를 사용할 수 있으며 GUI와 MailWorker가 주제를 구독합니다. 솔루션에서 MailWorker는 메시지를 처리하고 GUI는 메시지를 볼 것입니다. MailWorker는 실행되지 않아도 발행물을 놓치지 않아야하므로 영구 가입을 생성해야합니다. GUI의 경우 구독 유형을 선택할 수 있습니다. – Shashi
나는 잡기 때문에 GUI와 Worker를 하나의 주제에 등록하면 그 중 하나가 실행되지 않고 메시지가 손실된다는 것을 알 수 있습니다. 별도의 주제와 대기열이있는 동안에는 이런 일이 발생하지 않습니다. 권리? – lanoxx