2012-07-06 4 views
2

나는이 질문 (Multithreaded JMS code : CLIENT_ACKNOWLEDGE or transacted session를) 읽을 수 있지만 나는 메시지 소비자의 이러한 두 가지 방법의 차이 무엇입니까 이해하지 않았다CLIENT_ACKNOWLEDGE - JMS

  1. 연결이되지는 처리됨. 세션은 CLIENT_ACKNOWLEDGE 모드입니다. 여러 개의 메시지가 수신 된 다음 acknowledge() 중 하나가 수신됩니다.
  2. 연결이 처리됩니다 (xa 아님). 세션은 AUTO_ACKNOWLEDGE 모드입니다. 우리는 여러 메시지를받은 다음 commit()을합니다.

메시지 공급자 동작에 따라 좌우 될까요?

답변

3

메시지가 단지 하나의 목적지에서 수신 될 때별로 차이가 없다고 생각합니다. 하나는 CLIENT_ACKNOWLEDGE 또는 Transacted 세션을 사용할 수 있습니다.

그러나 세션에서 여러 대상을 사용하는 경우 대기열에서 메시지를받은 다음 처리하여 같은 세션의 다른 항목으로 처리 결과를 게시하면 처리 된 세션이 더 적합합니다. 따라서 수신 및 게시 메시지는 모두 하나의 트랜잭션에서 발생합니다. 메시지 처리의 결과에 따라 트랜잭션을 커밋하거나 롤백 할 수 있습니다.