728x90
반응형
SMALL
https://www.rabbitmq.com/nack.html
스프링에서 @RabbitListener 어노테이션을 사용해서 consume 하는 코드가 있다.
보통 default 로 auto ack 신호가 rabbitmq 서버로 전송되기 때문에
자동으로 q의 메시지는 삭제된다. 그러나 문득 궁금하였다.
누군가가 consume 한 메시지를 받으면 ack, 못받으면 nack 할수 있는 방법이 있을까?
찾아보니 당연히 있었다.
위의 공식문서에도 나와있지만
reject 는 단일메시지에서 사용
nack 은 단일 또는 복수메시지에서 주로 사용한다.
nack 이 조금 더 extend 하다고 생각하면되며 주로 nack이 범용적으로 사용된다.
예제코드를 확인하자
@RabbitListener(queues = "001")
public void consume1(String message, Channel channel,
@Header(AmqpHeaders.DELIVERY_TAG)long tag) throws IOException {
try {
log.info("message {}",message);
//거부하고 싶을땐 nack
//reject과의 차이점은 reject은 단일데이터, nack은 단일 또는 복수 데이터를 다루며 nack이 좀더 extend한 버전임
channel.basicNack(tag,false,true);
}catch(Exception ex) {
ex.printStackTrace();
// handle exception
}
}
consume 속도는 2000/s 를 넘고 있는데 ack 메시지가 오고있지 않기 때문에 메시지를 없애지 않고 있다.
이를 이용하여 추후 누군가가 정확하게 메시지를 받았을때 basicAck 를 전송하는 코드만 추가 한다면 상대방이 받았을때 q의 메시지가 삭제될수 있게 핸들링 할수 있다.
728x90
반응형
LIST
'나의 주니어 개발 일기 > RabbitMQ' 카테고리의 다른 글
RABBITMQ 심화속성 정보 (0) | 2024.03.06 |
---|---|
RABBITMQ HA,클러스터 구성방법 (0) | 2024.03.05 |
Rabbit MQ Queue 정보를 다른 Rabbit MQ 서버로 이전하는 방법 (0) | 2024.02.20 |
NGINX 로 RabbitMQ 로드밸런싱 하기 (0) | 2023.07.12 |
haproxy 로 RabbitMQ서버 로드밸런싱 하기 (0) | 2023.07.11 |