2017-04-18 5 views
0

안녕하세요 저는 Camel을 처음 사용하고 JMS 대기열과 관련된 디자인 관련 질문을 가지고 있습니다.Camel JMS 대기열 폴링 및 데이터 복구

데이터 세트를 받고 있습니다. 이 데이터에는 참조 날짜가 있습니다. 이 데이터는 일괄 처리로 15 분마다 전송됩니다.

수신 된 데이터를 처리하고 다른 경로로 전달해야합니다.

주어진 데이터를 처리 할 수없는 경우 다시 처리해야합니다. 그리고 다음 데이터 세트가 처리되기 전에 처리되는지 확인해야합니다.

그래서 처리하기 전에 이러한 데이터를 받기 위해 JMS 라우트를 작성하려고합니다. 그런 다음 처리하십시오. 그런 다음 다른 대기열로 보냅니다.

FTP -> 프로세스 데이터 행 (A) -> JMS 큐 -> 프로세서 (B) -> 직접 : 프로세서 B는 I 데이터가 다음 전에 처리되어야 할 실패하면

전화 데이터 세트는 FTP에 의해 보내집니다. (두 번째 데이터 세트에는 첫 번째 데이터 세트의 데이터 업데이트가 포함될 수 있기 때문에)

그래서 대기열을 사용하여 대기열을 항상 수신중인 순서대로 처리하도록 생각했습니다.

그러나 Camel을 사용하지 않고 JMS를 사용한 나의 경험은 일단 큐에서 개체가 사용되면 큐에 더 이상 존재하지 않는다는 것입니다. 낙타도 마찬가지입니까? 이 경우 데이터를 처리하거나 대기열에 다시 넣으려고해야합니까?

"복구"부분이 분명하지 않아이를 지원하는 패턴을 이해하고 싶습니다. 당신의 도움에 대한

많은 감사

답변

0

이 부분 "개체가 더 이상 큐에없는 대기열에서 소비되면." 완전히 정확하지 않습니다. 실제로 대기열에 가입하고 메시지를받을 때이를 처리하고 승인을 JMS 브로커에 다시 보내야합니다. 확인 응답이 성공하면 메시지가 대기열에서 제거됩니다. 그러나 확인이 성공하지 못하거나 프로세스가 중단되어 브로커와의 연결이 끊어지면 메시지가 대기열에서 제거되지 않고 다른 소비자에게 전달됩니다.

대부분의 JMS 라이브러리는 사용자가 메시지를 받았을 때 승인이 전송 될 때 모드를 사용하지만 종종이 모드를 변경하고 처리 부분이 성공적으로 완료 될 때 수동으로 확인을 보낼 수 있습니다.

무엇에 대한 낙타 JMS (http://camel.apache.org/jms.html)는 엔드 포인트 옵션과 같은 몇 가지 다른 가능한 값이있다 "acknowledgementModeName"사용할 수 있습니다

  • AUTO_ACKNOWLEDGE (기본값) -에서 확인이 "에서"직후에 맞습니다 전송됩니다 당신의 route
  • CLIENT_ACKNOWLEDGE - 응용 프로그램이 승인을 보낼 때를 제어하고 교환 처리 중에 예외가 발생하지 않으면 메시지가 승인되어 대기열에서 제거됩니다.