- 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 |