rabbitmq 메시지 발송의 신뢰성 메커니즘

1867 단어
1. 메시지 발송 시 exchange 전송 확인, 사물 메커니즘 또는 메시지 확인 메커니즘 사용 가능
2. 메시지가 exchange에 전달되면 mandatory를true로 설정하여 메시지가 exchange에서queue로 전달되도록 합니다
3. exchange,queue, 메시지 지속화
4. 메시지가 소비자에게 성공적으로 처리되는지 확인하려면 소비자는 autoAck을false로 설정해야 한다(true일 경우 소비자측이 이상을 던지지 않으면ack, 소비자측이 메시지를 받고 질질 끌면 이 메시지도 성공처리로 간주된다)
상기 네 가지는 메시지가'적어도 한 번'이 배달되는 것을 확보했는데, 그 중 하나와 두 가지는 메시지 발송 중의 신뢰성에 관한 것이다
 
모든 rabbitTemplate는confirm-callback과return-callback만 있을 수 있습니다. 같은 프로젝트에 여러 개의 설정이 필요합니다. 만약에 어떤 메시지는 전송을 확인해야 하고, 필요하지 않으면 여러 개의amqpTemplate(rabbitTemplate)를 실례화해야 합니다.
정보: confirm-callback을 사용하려면 publisherConfirms를true로 설정해야 합니다
 // broker , exchange , exchange ,broker ack。
rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback(){
     @Override
     public void confirm(CorrelationData correlationData, boolean ack, String cause) {
         if (ack) {
             System.out.println(" ");
         } else {
             // (nack)
            System.out.println(" ");
         }
     }
});

 
2: return-callback을 사용할 때 mandatory를true로 설정해야 하고,publisherReturns도true로 설정해야 합니다
rabbitTemplate.setMandatory(true);
// broker , exchange , exchange ,broker ack。
rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() {
     @Override
     public void returnedMessage(Message message, int replyCode, String replyText,
                                 String exchange, String routingKey) {
         // 
         RepublishMessageRecoverer recoverer = new RepublishMessageRecoverer(errorTemplate,"errorExchange", "errorRoutingKey");
         Throwable cause = new Exception(new Exception("route_fail_and_republish"));
         recoverer.recover(message,cause);
         System.out.println("Returned Message:"+replyText);
     }
});

좋은 웹페이지 즐겨찾기