참조 블로그 게시물: http://www.cnblogs.com/SzeCheng/p/4792084.html
참조 블로그 게시물: http://activemq.apache.org/producer-flow-control. html
용어 설명:
P: 생산자
C: 소비자
서버: P 또는 ActiveMQ 서비스
클라이언트: ActiveMQ 서비스 또는 C
클라이언트가 메시지를 성공적으로 받았다는 표시는 메시지가 서명되었다는 의미입니다. 메시지 수신 성공에는 일반적으로 다음 세 단계가 포함됩니다.
1. 클라이언트가 메시지를 받습니다.
2. 클라이언트가 메시지를 처리합니다.
3. 메시지가 서명되었습니다.
session = connection.createSession(Boolean.false, Session.CLIENT_ACKNOWLEDGE);##第一个参数控制事务,第二个参数控制消息
트랜잭션이 없는 세션에서 메시지 서명 시기와 방법은 세션 설정에 따라 다릅니다.
1. Session.AUTO_ACKNOWLEDGE
클라이언트가 receive 또는 onMessage에서 성공적으로 반환되면 Session은 자동으로 클라이언트가 이 메시지를 수신했다는 서명을 합니다.
2. Session.CLIENT_ACKNOWLEDGE
클라이언트는 메시지의 확인 메서드를 호출하여 메시지에 서명합니다.
message.acknowledge();
트랜잭션이 포함된 세션에서는 트랜잭션이 커밋될 때 서명이 자동으로 발생합니다. 트랜잭션이 롤백되면 수신된 모든 메시지가 다시 전달됩니다. 실제로 여기서 Session.CLIENT_ACKNOWLEDGE는 거의 사용되지 않습니다.
session = connection.createSession(Boolean.TRUE, Session.CLIENT_ACKNOWLEDGE);
session.commit();
요약:
1. 생산자의 경우: 서버는 P이고 클라이언트는 ActiveMQ 서비스입니다. 세션은 AUTO_ACKNOWLEDGE와 CLIENT_ACKNOWLEDGE로 설정되어 있지만 상대적으로 상황에 따라 차이는 크지 않습니다.
2. 소비자의 경우: 서버는 ActiveMQ이고 클라이언트는 C입니다. 세션은 AUTO_ACKNOWLEDGE로 설정됩니다. 메시지가 수신되면(receive 또는 onMessage가 성공적으로 반환됨) 소비가 성공하고 데이터가 대기열에서 제거됩니다. 데이터가 우리가 원하는 결과로 올바르게 처리되는지 여부는 신경 쓰지 않습니다. 세션이 CLIENT_ACKNOWLEDGE로 설정되면 성공적인 소비를 위해 승인 메서드를 수동으로 호출해야 하며 그런 다음 데이터가 대기열에서 제거됩니다.
3. P와 C의 세션이 서로 영향을 주지 않도록 설정한 모드입니다.