본문 바로가기

개발 공부

RabbitMQ 작업대기열(Work Queue) Java

  • RabbitMQ 작업대기열(Work Queue) 란?

produce 가 queue에 데이터를 넣은면 queue는 구독하고 있는 consume에게 순차적으로 데이터를 넘겨주는것을 말한다.

  • 구현 방법

먼저 앞서 사용했던 Send 와 Recv Class를 조금 바꾸어서 구현 해보겠다.

1. Send 를 변형한 Class 를 NewTask 라고 하겠다.

 

String message = String.join(" ", argv);

channel.basicPublish("", "hello", null, message.getBytes());
System.out.println(" [x] Sent '" + message + "'");

NewTask의 보낼 String 데이터를 선언한다.

 

2. Recv 를 변형한 Class를 Worker라고 하겠다.

 

//데이터를 받을때까지 버퍼링/ 받게되면 byte 데이터를 String으로 변환.
//가상 딜레이 적용
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
  String message = new String(delivery.getBody(), "UTF-8");

  System.out.println(" [x] Received '" + message + "'");
  try {
    doWork();
  } finally {
    System.out.println(" [x] Done");
  }
};
//tcp 통신에서의 ack설정을 자동으로 한다.
boolean autoAck = true;
channel.basicConsume(TASK_QUEUE_NAME, autoAck, deliverCallback, consumerTag -> { });
//가상 딜레이 설정
    private static void doWork() {
        try {
            Thread.sleep(10000);
        } catch (InterruptedException _ignored) {
            Thread.currentThread().interrupt();
        }
    }

일부러 딜레이를 주어, 작업량이 많은 상황을 연출할 것이다.

 

  • 실행 방법

Recv와 Worker를 실행하고 NewTask 클레스를 4번 실행한다.

  • 실행 결과

각각 2번씩 들어간것을 확인 할 수 있다.

 

 

'개발 공부' 카테고리의 다른 글

JUnit 기본  (0) 2023.06.19
RabbitMQ 작업대기열(Work Queue) Java 2  (0) 2023.06.14
RabbitMQ Recv Java  (0) 2023.06.13
RabbitMQ Sendding Java  (0) 2023.06.13
RabbitMQ 사용해 보기 Java  (0) 2023.06.13