2014-12-30 7 views
0

여러 JMS 이벤트를 처리하는 가장 좋은 방법은 짧은 시간 (예 : 몇 밀리 초) 동안 시퀀스로 도착하는 것이 좋습니다. 예를 들어, 다음과 같은 이벤트 리스너의 외모 내 현재의 콜백, 이벤트 핸들링에서 JMS 이벤트 일괄 처리

public void onMessage(final Message msg) { 
     process(msg); 
    } 

시퀀스

은 일반적으로 단일 사용자 액션에 의해 트리거 필요가있다은 같은 그룹으로 처리합니다. 모바일 서버의 PUSH 엔진을 구현 중이므로 긴 지연으로 수정 비율로 일부 명령을 예약 할 수 없습니다. 더 효율적 인 배치 이벤트 처리를 위해 두 번째 또는 그 이하의 지연을 허용 할 수 있습니다.

감사합니다.

+0

내가 볼 수있는 유일한 해결책은 들어오는 JMS 메시지를 보관하는 대기열을 갖는 것이고 빠른 속도로 대기열에서 빼는 스케줄러가 있어야합니다. 그것은 매우 비싼가요? 시끄러운 것 같습니다. –

+0

이것은 고정 된 속도로 버퍼링 된 JMS 메시지의 일괄 처리 일정을 계획하는 단일 스레드 실행 프로그램을 사용하여 끝내 었습니다. –

답변

0

주기적으로 일괄 처리를 고정 속도로 예약하는 대신 일부 조정을 수행 한 후 콜백 중에 잠시 동안 하나의 작업을 예약하는 결과가 발생했습니다. 이렇게하면 모든 관련 이벤트가 캐시에 도착하기까지 충분한 시간을 확보 할 수 있습니다. 그리고 캐시의 모든 이벤트가 대량 처리되면 캐시가 지워 지므로 다음 예약 된 작업 (각 콜백 중에 하나의 작업 예약)을 처리 할 필요가 없습니다. 캐시가 다시 채워지면 작업이 처리를 다시 시작합니다.

물론 캐시는 스레드로부터 안전해야합니다. 나는이 접근법이 사건의 짧은 연속이 불규칙한 속도로 도착하는 나의 시나리오에서 가장 잘 작동한다고 생각한다.

관련 문제