2017-11-05 1 views
0

HornetQ 기반 JMS 공급자가 있고 소비자가 CLIENT_ACKNOWLEDGE_MODE에서 공급자에 연결되어 있습니다. message.acknowledge() 스 니펫은 if else 아래에 있습니다. 따라서 소비자는 메시지 처리에 응용 프로그램 계층에 오류가있는 경우 서버에 승인을 보내지 않을 것입니다. 여기에 두 가지 질문이 있습니다.HornetQ 비 승인 메시지의 동작

1) 서버에 대기중인 메시지가 더 많이 남아있게됩니까? 에 이전

2) 확인되지 않은 메시지가 소비자를 다시 시작 다시 아래로 흘러 언급 한 바와 같이 소비자가 메시지에 을 인정하지 않았다하더라도 소비자에게 흐르는.

이 내가

1

을 요구했다 질문)가에 메시지 중 하나를 인정하지 않은 경우에도 메시지가 소비자 로그에 따라 소비자에게 아래로 흐르는 계속 내 관찰의 일부입니다 (예 : 은 캐치되지 않은 예외가 없으므로 소비자가 인지를 알 수 없음).

2) 두 번째로, 소비자에게 다시 메시지를 보내면 메시지가 서버에서 다시 흐르지 않습니다. 놀라운 결과입니다.

누군가가이 동작을 명확히 할 수 있습니까?

답변

0

메시지 확인과 관련하여 응용 프로그램이 수행하는 작업을 완전히 결정하기는 어렵지만 내 생각에 메시지를 확인한 후에 해당 메시지를 확인하지 못했습니다. 이 경우 클라이언트 확인 모드를 사용하기 때문에 클라이언트 모드 작동 방식 인 다음 확인 메시지도 이전 메시지에 적용됩니다.

Session.CLIENT_ACKNOWLEDGE : 클라이언트가 메시지의 확인 응답 방법을 호출하여 메시지를 확인합니다. 이 모드에서는 승인이 세션 레벨에서 발생합니다. 소비 된 메시지를 Acknowledging하면 세션에서 소비 한 모든 메시지의 수신을 자동으로 확인합니다. 예를 들어 메시지 사용자가 10 개의 메시지를 소비 한 다음 전달 된 다섯 번째 메시지를 확인하면 10 개의 메시지가 모두 확인됩니다.

그래서주의 깊게 읽으면 클라이언트 확인 모드에서 메시지를 확인하는 세션의 소비자가 서로 영향을 미칠 수 있습니다.

더 나은 답변을 얻으려면 이벤트의 사슬을 더 세분화하여 진행 상황을 명확하게해야합니다.

+0

- "문제의 메시지를 확인하지 못한 후에도 메시지를 계속 확인합니다."- 예 : 다른 메시지가 서버에서 내려져 소비자가 성공적으로 처리 한 후 메시지를 승인하지 않은 경우 예. 확인을 보냅니다. (참고 - 동의하지 않는 소비자는 응용 프로그램 계층의 일부 오류 상태로 인해 의도적으로 인정하지 않았습니다. 왜 내가 레거시 코드로 작업하는지 알지 못합니다). – aashish

+0

그 이유는 내가 원래의 질문에 그 질문에 매우 명확한 질문 - 1) 1) 1 서버에서 대기중인 메시지는 소비자가 메시지 중 하나를 확인하지 않았더라도 소비자에게 계속 흐를 것인가? 앞에서 언급했듯이 메시지 중 하나가 수신 확인되지 않은 경우 서버에서 더 많은 메시지가 전송되는 이유를 설명해주십시오. 또한 올바른 동작으로 인해 소비자가 메시지 중 하나를 확인하지 못하면 더 많은 메시지를 보내지 않도록 서버를 구성 할 수 있습니다. – aashish

+0

더 큰 질문에 답하지 못했습니다. 즉,이 메시지 이후에 다른 메시지가 ACK되었습니다. –