Browse Source

Rabbitmq - queue Ack 설정

Test
박재우 2 years ago
parent
commit
eae7539173
  1. 15
      src/main/java/com/palnet/biz/message/consumer/MessageConsumer.java

15
src/main/java/com/palnet/biz/message/consumer/MessageConsumer.java

@ -30,11 +30,20 @@ public class MessageConsumer {
@RabbitListener(queues = {"app.drone.queue"}) @RabbitListener(queues = {"app.drone.queue"})
public void receivedDroneMessage(final String message, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) throws IOException { public void receivedDroneMessage(final String message, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) throws IOException {
try { try {
GPModel model = objectMapper.readValue(message, GPModel.class); GPModel model = objectMapper.readValue(message, GPModel.class);
messageService.insert(model); // GPS 정보 DB 동기화 처리 messageService.insert(model); // GPS 정보 DB 동기화 처리
// channel.basicAck(tag, false); /* channel.queueDeclare(message, true, false, false, null); rabbitMQ 서버 강제 종료 Queue가 유실되는 것을 방지하기 위해 disk에 Queue를 적재 ( Queue 영속성 )
-> 옵션 설정시 Queue의 유실은 방지할 있으나 Consumer Ack의 응답률이 절반으로 떨어지게 되고 , Unacked -> Ready로 되돌아가는 Queue가 생김 */
channel.basicAck(tag, true); // channel 유지를 위해 Consumer -> Producer로 수신 확인 신호를 자동으로 전송
// channel.exchangeDeclare(message, "direct", true); Queue Exchange 방식 지정(binding 안되어있으면 설정)
} catch (RuntimeException e) { } catch (RuntimeException e) {
channel.basicReject(tag, false); channel.basicReject(tag, false);
} }

Loading…
Cancel
Save