2010-08-11 10 views
4

장기 실행 백그라운드 프로세스를 실행하기 위해 웹 응용 프로그램에서 JMS를 사용하는 튜토리얼 또는 유사한 코드를 누군가에게 알려 줄 수 있습니까? (스레드를 사용하는 대신) JMS 메시징의 개념을 잘 알고 있지만 JMS API 나 브로커를 사용하지 않았습니다. (Apache ActiveMQ를 배우려하고 있습니다)장기 실행 프로세스에 JMS 사용?

다음과 같은 기능을 제공하고 싶습니다. 프로세스를 실행하기 위해 대기열에 메시지 제출 해당 프로세스의 상태 (진행)를 임의의 시간에 확인하십시오.

감사합니다!

답변

2

컨텍스트에서 JMS를 사용하는 진정한 요점은 작업을 비동기 적으로 시작하는 것입니다. 이것은 불이고 미들웨어 용어를 잊어 버립니다. JMS는 전달 의미를 보장합니다. 즉, 메시지가 대기열에 놓이면 메시지가 거기에 도착하도록 보장됩니다.

아이디어는 당신이해야 할 일을하고 나중에 처리 할 수있는 작업이 있다면 큐에 메시지를 넣고 나중에 실행합니다. 누군가 응답하는 동안 상당한 양의 처리를 줄일 수 있습니다.

JMS의 또 다른 이점은 시스템의 다른 부분을 동시에 실행할 필요가 없다는 것입니다. 프런트 엔드가 계속 작동하는 동안 메시지를 사용하는 부분은 유지 관리를 위해 중단 될 수 있습니다.

+0

감사합니다, 메시지 지향 아키텍처에 대한 JMS를 사용하는 방법에 대한이 모든 예는? – wsb3383

+0

또한 게시/구독 방법 또는 대기열 방법을 사용하는 것이 좋습니다. 이유는 무엇입니까? – wsb3383

1

이전 게시물은 주문이나 요청을 비동기식으로 대기열에 넣은 다음 나중에 가져 오도록 모델 측면에서 정확합니다. 그러나 장기 실행 프로세스의 문제는 실제로 해결되지 않습니다.

대기열 및 주제와 관련하여 지속적인 대기열의 이점은 대기열에 사용자가없는 경우 구독자가있을 때까지 메시지가 소비되기를 기다리는 것입니다. 항목에서 연결되지 않은 소비자가 다시 연결되면 부재시 전송되는 메시지를 수신하게하려면 영구 가입을 만들어야합니다.

그래서 장기 실행 프로세스는 어떻게 정의합니까? 다중 단계 프로세스의 경우 일반적으로 워크 플로우 엔진과 같은 것을 사용합니다. BPM 도구 또는 "OS Workflow"와 같은 옵션이 있습니다. 아래 예제처럼 보이는 자생 솔루션을 사용할 수도 있습니다.

1) 프로세스의 단계를 정의하는 일종의 워크 플로 정의가 필요합니다. 이는 특성 파일 또는 XML 파일 일 수 있습니다. 2) Web App는 실행될 프로세스의 표시와 함께 대기열 또는 주제 (pub/sub)에 메시지를 넣습니다 (또는 다른 프로세스에 대해 특정 대상을 가질 수 있습니다). 3) Dispatcher MDB가 '주문'을 선택합니다. 상태가 'NEW'인 큐를 종료하고 첫 x 째 단계 처리를 시작합니다. 4) 단계가 완료되면 MDB는 실행중인 프로세스와 실행될 마지막 단계 또는 실행 된 마지막 단계를 나타내는 큐에 새 메시지를 둡니다 (프로세스가 결정적 일 수있는 방법에 따라 다름)) 5) MDB가 메시지를 가져 와서 프로세스가 'IN_PROGRESS'인지 확인합니다. 실행될 다음 단계를 판별하거나 메시지 (JMS 헤더 값 또는 XML 형식, 아마도 XML 형식)에서 다음에 실행할 단계를 읽습니다. 6) 단계 4 & 5는 프로세스 인스턴스 완료되었습니다

이 경우 주문 및 프로세스 인스턴스 정보의 외부 표현이 필요합니다. 이렇게하면 웹 애플리케이션의 요청 상태를 확인할 수 있습니다. 웹 애플리케이션이 상태 정보에 액세스 할 수 있도록 프로세스의 각 단계가 완료되면 업데이트 된 상태로 주문을 읽고 유지해야합니다.

이 아키텍처의 핵심 구성 요소는 메시지를 수신하고 프로세스의 다음 단계를 실행하는 디스패처 MDB입니다. OS Workflow로 작업했을 때 그 핵심 부분은 하나도 빠졌습니다. 이 방법으로 풀의 MDB 수와 큐의 사용자 수를 제어하여 프로세스 단계를 실행하는 스레드 수를 제어 할 수 있습니다. 이 아키텍처에서는 워크 플로 단계에 대한 항목 위에 큐를 사용할 것을 권장합니다. 그러나 각 프로세스 단계가 끝나면 구독자가 업데이트 된 상태 정보를 얻을 수있는 메시지를 게시 할 수 있습니다.

JPA를 비롯한 Java EE6 기술을 사용하면 쉽게 XSD를 만들 수 있고 JAXB를 사용하여 도메인 데이터 모델 POJO를 생성하고 지속성을 위해 JPA를 사용할 수 있습니다. 올해 초 WebLogic에서 지원되는 JEE6 기술을 다루는 웹 캐스트를했습니다. 다음은 리플레이입니다 : http://www.oracle.com/technetwork/middleware/weblogic/learnmore/weblogic-javaee6-webcasts-358613.html.

나는 또한 JBoss의 마이그레이션 : [email protected]에 대한 당신과 함께 말을 여전히 관심

관련 문제