activeMQ 고급 기능의 소비 재시도 메커니즘

activeMQ에서 메시지 재전송은 브로커가 메시지를 반드시 이전 소비자가 아닌 소비자에게 재분배 할 수 있음을 의미합니다. 메시지를 다시 보낸 후 소비자는 다시 사용할 수 있습니다. 메시지 재전송에는 다음과 같은 상황이 있습니다.

    1. 트랜잭션 세션에서 session.commit ()이 수행되지 않은 경우 session.rollback ()을 수행하면 아직 커밋되지 않은 모든 메시지가 재전송됩니다.

    2. 클라이언트의 수동 확인 방법을 사용할 때 확인이 확인되지 않고 Session.recover ()가 실행되면 아직 확인되지 않은 모든 메시지가 재전송됩니다.

    3. 확인되지 않은 모든 메시지에 대해 session.closed ()가 트랜잭션을 닫을 때 아직 확인되지 않은 모든 메시지 브로커가 재전송되고 즉시 재전송됩니다.

    4. 소비자가 메시지를 가져온 후에는 시간 초과 후 응답 확인이 없으며 브로커가 메시지를 다시 보냅니다.

  독 ACK


메시지가 재전송되고 기본 최대 재전송 시간 (기본값 6 회 )을 초과하면 소비자의 MQ는 "poison ack "를전송하여 메시지가 유독하다는 것을 나타내고 브로커에게 다시 보내지 않도록 지시합니다. 이때 브로커는 메시지를 DLQ (개인 메시지 큐)에 넣습니다.

          메시지 재전송 간격 및 재전송 횟수

    간격 1 회 6 (6 회 후 배달 못한 편지 대기열 입력)

자세한 내용은 공식 웹 사이트를 참조하십시오 :

공식 웹 사이트는 가장 권위있는 참고서입니다 : http://activemq.apache.org/redelivery-policy

 

원하는 관련 속성을 설정하는 여러 방법이 있음을 알 수 있습니다.

 

재전송의 다양한 속성에 대한 중국어 설명 :

공식 웹 사이트 예 :

ActiveMQConnection connection ...  // Create a connection

RedeliveryPolicy queuePolicy = new RedeliveryPolicy();
queuePolicy.setInitialRedeliveryDelay(0);
queuePolicy.setRedeliveryDelay(1000);
queuePolicy.setUseExponentialBackOff(false);
queuePolicy.setMaximumRedeliveries(2);

RedeliveryPolicy topicPolicy = new RedeliveryPolicy();
topicPolicy.setInitialRedeliveryDelay(0);
topicPolicy.setRedeliveryDelay(1000);
topicPolicy.setUseExponentialBackOff(false);
topicPolicy.setMaximumRedeliveries(3);

// Receive a message with the JMS API
RedeliveryPolicyMap map = connection.getRedeliveryPolicyMap();
map.put(new ActiveMQTopic(">"), topicPolicy);
map.put(new ActiveMQQueue(">"), queuePolicy);

 

 

추천

출처blog.csdn.net/m0_46405589/article/details/115180996