상세 컨텐츠

본문 제목

[JAVA] 메시지 큐를 활용한 효율적인 작업 처리

JAVA

by 소란한소란 2024. 2. 21. 12:57

본문

728x90

 

메시지 큐는 현대 소프트웨어 개발에서 많이 사용되는 효과적인 비동기 처리 방법 중 하나입니다. Java 언어를 사용하여 메시지 큐를 통해 비동기 작업을 어떻게 처리하는지에 대해 알아보겠습니다.

메시지 큐 흐름


1. 메시지 큐 선택

우선 사용할 메시지 큐를 선택해야 합니다. Apache Kafka, RabbitMQ, ActiveMQ와 같은 대표적인 메시지 브로커를 고려할 수 있습니다.


2. 큐 생성

메시지를 보낼 때 사용할 큐를 생성합니다. 이는 메시지 큐에 메시지를 넣을 때 사용하는 대기열입니다.

 

// Java와 RabbitMQ를 사용하는 예시
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class MessageQueueProducer {
    private final static String QUEUE_NAME = "my_queue";

    public static void main(String[] argv) throws Exception {
        // 연결 설정
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        try (Connection connection = factory.newConnection();
             Channel channel = connection.createChannel()) {
            // 큐 생성
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);

            // 메시지 생성 및 전송
            String messageBody = "비동기 처리할 작업 데이터";
            channel.basicPublish("", QUEUE_NAME, null, messageBody.getBytes());
            System.out.println(" [x] Sent '" + messageBody + "'");
        }
    }
}

 


3. 프로듀서 생성

비동기 작업을 발생시킬 애플리케이션에서 메시지를 생성하고 큐로 보내기 위한 프로듀서를 만듭니다.


4. 컨슈머 생성

비동기로 처리하고자 하는 작업을 수행할 애플리케이션에서 메시지를 받아 처리하는 컨슈머를 만듭니다.

 

// Java와 RabbitMQ를 사용하는 예시
import com.rabbitmq.client.*;

public class MessageQueueConsumer {
    private final static String QUEUE_NAME = "my_queue";

    public static void main(String[] argv) throws Exception {
        // 연결 설정
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        try (Connection connection = factory.newConnection();
             Channel channel = connection.createChannel()) {
            // 큐 생성
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);

            // 콜백 함수 등록
            DeliverCallback deliverCallback = (consumerTag, delivery) -> {
                String message = new String(delivery.getBody(), "UTF-8");
                // 메시지 수신 후 비동기로 처리할 작업 수행
                System.out.println(" [x] Received '" + message + "'");
            };

            // 메시지 수신 대기
            channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> {
            });
        }
    }
}

이러한 구조를 통해 Java 언어를 사용하여 메시지 큐를 통한 비동기 작업 처리를 구현할 수 있습니다. 이를 통해 애플리케이션은 느슨하게 연결되어 있고, 확장성이 뛰어나며, 고가용성을 유지할 수 있습니다. 메시지 큐를 통한 비동기 처리는 복잡한 작업을 효율적으로 처리하는데 큰 도움이 됩니다.

 

728x90

관련글 더보기