2010-06-29 2 views
4

저는 문서 관리 시스템에서 일하고 있습니다. 문서는 대기열 기반 워크 플로 시스템을 구현하는 방법은 무엇입니까?

  • 문서가 추가 처리를
  • 을 위해 사용자에게 문서에 대한 준비 작업을 다수 제공됩니다 않는 시스템
  • 시스템 이메일로 전송됩니다

    1. : 예 워크 플로우는 다음과 같이 될 것이다
    2. 그 후 품질 보증으로 문서가 전송됩니다.
    3. 그 후 시스템에서 문서 번호 또는 사후 처리 작업을 수행합니다.
    4. 문서는 완전히 처리되고 배포 된 것으로 간주됩니다 (예 : 시스템에 문서를 이메일로 보낸 사람에게 다시 이메일을 보냈습니다.)

    입력 내용이 다양하기 때문에 (대개 볼륨이 높을 수 있음) 확장성에 대해 매우 염려합니다.

    예를 들어 시스템에서 전자 메일 첨부 파일을 이미 다운로드했다고 가정 해보십시오. 첨부 파일이 PDF 문서 인 경우 시스템에서 PDF를 개별 페이지로 분할 한 다음 각 페이지를 여러 크기의 축소판으로 변환해야합니다. PDF가 있는지 확인하기 위해 cron 작업 검사 (예 : 매분)를 할 계획입니다 처리해야하는 문서 신고 시스템 (예 : 'PDF 문서 준비 완료')을 사용하면 처리 할 플래그가 지정된 모든 PDF 문서의 데이터베이스를 확인할 수 있습니다. PDF 처리가 완료되면 플래그가 "PDF 처리 완료"라고 업데이트 될 수 있습니다.

    그러나 각 PDF 문서의 처리에는 많은 시간이 소요되므로 다음 cron 작업이 실행될 때 해당 cron 작업도 이전 cron 작업이 아직 처리중인 PDF를 처리하려고합니다.

    가능한 해결책은 "PDF 문서 현재 처리 중"인 PDF 문서를 즉시 플래그하는 것입니다. 그러면 다음 cron 작업이 실행될 때 이미 처리 된 작업이 제외됩니다.

    따라서, 워크 플로우의 각 단계는 아마 3 개 플래그를해야합니다 :

    1. PDF 문서 준비는
    2. PDF 처리가

    같은

  • 을 완료 처리중인
  • PDF 문서 현재 처리 할 품질 관리 :

      문서 준비 QA
    1. 문서 현재 존재 QAD
    2. 문서 QA에 대한

    이 좋은 방법입니다

  • 을 완료 0? 더 나은 접근 방법이 있습니까? 데이터베이스의 "PDF 문서"테이블의 단일 열로 이러한 플래그를 사용할 수 있습니까? 또는 플래그가 자체 테이블이되어야합니다 (예 : 특히 문서에 여러 플래그가 설정된 경우).

    이러한 시스템을 구현하는 방법에 대한 제안을 권하고 싶습니다.

    +0

    여러 사용자가 대기중인 시스템을 설정해야합니다. 그걸 가르쳐 줄까? –

    +0

    물론입니다. 나는 모든 아이디어에 열려 있습니다. – StackOverflowNewbie

    답변

    2

    것은 해결하기 (면책 전 C#의 아무것도 몰라) 동일한 문서에 대한 동시 처리에 대한 우려가 있다면 많은 스케줄러 패키지를 사용하여이 측면을 관리하는 데 도움이됩니다. http://www.quartz-scheduler.org/은 큰 성공을 거두었습니다.

    문제를 해결하려면받은 3 가지 상태를 받고 대기열에두고 처리해야합니다 (제안한 것과 유사).

    나는 데이터베이스를 폴링하고, 수신 된 pdfs를 찾고, 대기열에있는 pdf를 처리하고 표시 할 작업을 대기열에 넣는 예정된 되풀이 작업을 가지고있다. 동일한 트랜잭션에서 이러한 일이 일어나고 낙관적 잠금을 사용하면 다른 작업이 발생하여 다시 받아 들일 위험이 없습니다.

    Quartz는 구성 옵션이있는 스레드 풀을 사용하며 지연되고 리소스가 많은 처리 (서버 설정에서 이미지 미리보기에 사용)에 적합합니다.

    한 걸음 뒤로 물러나려면 지연된 pdf 처리를 포함하여 Java에서 원하는 작업 대부분을 처리 할 수있는 훌륭한 워크 플로 패키지가 있습니다. jbpm 또는 drools 흐름을 살펴보십시오. 복잡한 패키지라면 위대한 두 가지입니다.

    업데이트 : Drools Flow가 JBPM에 병합되었습니다. 이 특정 문제에 대해서는 약간의 "바주카포가있는 모기를 죽이는"상황 일 수도 있지만 훌륭한 워크 플로우 패키지입니다.

    0

    솔루션 종류는이 시스템을 구현하는 데 사용하는 기술에 따라 전자 메일 소프트웨어와 동일한 소프트웨어/언어로 처리되는 사전/사후 처리입니까? 또한 그들은 별도의 프로세스에서 실행됩니다.

    분산 된 구성 요소가있는 경우 RabbitMQ과 같은 AMQP 솔루션을 조사하는 것보다 훨씬 어려울 수 있습니다. 이는 각 작업을 대기열에 넣고 소비자 중 하나만 각 작업을 수행하도록합니다. (각 섬네일 작업을 개별 작업으로 모델링합니다).

    전체 시스템이 하나 개의 언어로 구현하고, 단일 프로세스 내에서 몇 가지 간단한 시스템을 거기에있다 그러나 당신이 사용할 수있는 경우 :

    • Resque
    • 자바는 잘 작동 루비에 대한 좋은 솔루션입니다 #이 작업 큐를 만드는 몇 가지 방법이있을 것이다 c를 LinkedBlockingQueue
    • 어, 나는 확신 :
    +0

    저는 WAMP/LAMP를 구현하고 있지만 기술에 의존하지 않는 솔루션을 찾고 있습니다. – StackOverflowNewbie

    +0

    AMQP는 시스템에 무관심하기 때문에 (다른 기술이 서로 통일 된 방식으로 대화 할 수 있도록 설계되었으므로) RabbitMQ는 여전히 당신을위한 옵션이어야합니다. 또는 Zend Server에 PHP를위한 특정 큐 구현이 있습니다 (많은 비용이 든다고 생각합니다). 또는 Resque http://github.com/chrisboulton/php-resque에 대한이 라이브러리가 PHP 코드에 연결됩니다. – Ceilingfish

    관련 문제