확인은 클라이언트와 메시지 서비스 간에 안정적인 메시지 전달을 확인하기 위해 보내는 메시지입니다. 확인은 제작자와 소비자에서 서로 다르게 사용됩니다.
메시지 생성 시, 브로커는 메시지를 받아서 대상에 넣고 영구적으로 저장했음을 확인합니다. 제작자의 send() 메소드는 이 확인을 받을 때까지 차단됩니다. 이러한 확인은 지속성 메시지를 보낼 때 클라이언트에 대해 투명합니다.
메시지 소비 시, 클라이언트가 대상으로부터의 메시지 전달을 수신하고 메시지를 소비했음을 확인한 다음 브로커가 해당 대상에서 메시지를 삭제합니다. JMS는 서로 다른 안정성 정도를 나타내는 다양한 확인 모드를 지정합니다.
AUTO_ACKNOWLEDGE 모드에서 세션은 클라이언트에서 소비하는 각 메시지를 자동으로 확인합니다. 브로커가 소비된 각 메시지에 대해 클라이언트 확인을 처리했음을 확인할 때까지 기다리는 동안 세션 스레드는 차단됩니다.
CLIENT_ACKNOWLEDGE 모드에서 클라이언트는 메시지 객체의 acknowledge() 메소드를 호출하여 하나 이상의 메시지를 소비한 후 명시적으로 확인합니다. 이것은 세션이 메소드의 이전 호출 이후에 세션에 의해 소비된 모든 메시지를 확인하기 때문입니다. 또한 브로커가 클라이언트 확인을 처리했음을 확인할 때까지 세션 스레드는 차단됩니다.
Message Queue는 클라이언트가 하나의 메시지에 대해서만 수신을 확인할 수 있는 메소드를 제공하여 이 모드를 확장합니다.
DUPS_OK_ACKNOWLEDGE 모드에서 세션은 메시지를 10개 소비한 후 확인합니다. 이 모드에서는 브로커 확인이 필요하지 않으므로 브로커 확인이 완료될 때까지 세션 스레드가 차단되지 않습니다. 이 모드에서는 메시지가 손실되지 않지만 이름이 DUPS_OK이기 때문에 중복 메시지가 수신될 수 있습니다.
안정성보다는 성능을 더 고려하는 클라이언트를 위해 Message Queue 서비스는 NO_ACKNOWLEDGE 모드를 제공하여 JMS API를 확장합니다. 이 모드에서는 브로커가 클라이언트 확인을 추적하지 않기 때문에 소비자 클라이언트에서 메시지를 성공적으로 처리했는지 확인할 수 없습니다. 이 모드를 선택하면 비영구 가입자에게 보내는 비지속성 메시지에 대한 성능이 향상될 수 있습니다.