2012-12-22 8 views
0

A, B, C 및 D 소비자가 4 명인 Job Scheduler가 있다고 가정 해 보겠습니다. X 유형의 작업은 Consumer A로 라우팅되어야하고 Y는 Consumer B에 입력되어야합니다. 소비자 A, B, C 및 D는 로컬 또는 원격으로 독립적 인 응용 프로그램으로 실행해야합니다.낙타 다중 소비자 구현 문제

소비자는 작업을 완료하는 데 여러 번 걸리고 나중에 작업 스케줄러로 연결되어 집계됩니다.

소비자 중 한 명의 클론이 자격있는 작업을 공유해야 할 수도 있습니다. 그러나 작업은 한 번만 처리해야합니다.

콘텐츠 기반 라우터가 이에 가장 적합한 솔루션입니까? 소비자들 사이에서 일을 나누기위한 인텔리전스 만 있기 때문에 커스텀 작업 스케쥴러가 필요합니다.

아니면 더 좋은 방법이 있습니까? 나는 브로커의 기능을 다른 소비자 (로드 밸런싱)로 자동으로 전환하는 것과 장애 발생시 자동으로 전환하는 것과 같은 기능을 필요로하지 않습니다.

답변

1

나는 내가 당신을 좇는다고 확신하지 못합니다. 이것은 비동기 처리에 대한 다소 단순한 시나리오와 같습니다.

이러한 작업을 Camel 응용 프로그램에 어떻게 보낼지 잘 모르겠지만 어딘가에받을 수 있다면 간단한 콘텐츠 기반 라우터를 사용할 수 있습니다.

사용자에 대한 요구 사항을 감안할 때, 작업 유형별로 하나의 대기열 인 Apache ActiveMQ 또는 유사한 브로커 미들웨어를 사용하는 JMS 대기열을 사용할 것입니다. 이렇게하면 실제로 코드를 변경하지 않고도 다른 컴퓨터에 소비자를 쉽게 배포 할 수 있습니다.

// Central node routes 
from("xxx:routeJob") 
    .choice() 
     .when(header("type").isEqualTo("x")) 
      .to("jms:queue:processJobTypeX") 
     .when(header("type").isEqualTo("y")) 
      .to("jms:queue:processJobTypeY") 
     .otherwise() 
      .to("jms:queue:processJobTypeZ"); 

from("jms:queue:aggregateJob") 
    .bean(aggregate); 

// different camel application (may be duplicated for multiple instances). 
from("jms:queue:processJobTypeX") 
    .bean(heavyProcessing) 
    .to("jms:queue:aggregateJob"); 

// Yet another camel application 
from("jms:queue:processJobTypeY") 
    .bean(lightProcessing) 
    .to("jms:queue:aggregateJob"); 

더 나은 대답을 질문을 다시 한 번 읽어 보시기 바랍니다 :)

관련 문제