[java] Apache ActiveMQ와 Spring Batch의 연동

Apache ActiveMQ는 오픈 소스 메시지 브로커로서, 메시지 기반 애플리케이션을 개발하는 데 사용됩니다. Spring Batch는 대용량의 데이터 처리를 위한 Batch 프레임워크입니다. 이 두 가지 기술을 함께 사용하여 간단하고 효율적인 메시지 처리 시스템을 구축할 수 있습니다.

ActiveMQ 설정

먼저, ActiveMQ를 설치하고 실행해야 합니다. ActiveMQ는 다양한 방법으로 설치할 수 있으며, 이 예제에서는 Apache ActiveMQ의 공식 웹사이트에서 다운로드하여 설치합니다.

설치가 완료되면 ActiveMQ 브로커를 실행합니다. 브로커 실행은 아래의 명령으로 수행할 수 있습니다.

$ activemq start

브로커가 실행되면 ActiveMQ 관리 콘솔에 접속하여 큐를 생성해야 합니다. 관리 콘솔은 기본적으로 http://localhost:8161/admin에서 확인할 수 있습니다.

Spring Batch 연동

Spring Batch 프로젝트에서 ActiveMQ를 연동하려면, 먼저 Spring Boot 프로젝트를 생성해야 합니다. Spring Boot는 Spring 기반 애플리케이션을 쉽게 구성할 수 있는 도구입니다. Spring Boot를 사용하여 프로젝트를 생성하려면, 다음과 같이 명령을 실행합니다.

$ spring init --dependencies=activemq my-batch-project

프로젝트가 생성되면, application.properties 파일에서 ActiveMQ와의 연동을 설정해야 합니다. 아래와 같은 설정을 추가합니다.

spring.jms.template.default-destination=your-queue-name
spring.jms.template.delivery-delay=5000
spring.jms.listener.concurrency=3

이 설정은 ActiveMQ 큐 이름을 지정하고, 메시지 전달 지연 시간을 설정하며, 리스너의 동시성 수를 지정합니다.

Spring Batch에서 ActiveMQ를 사용하려면, @EnableJms 어노테이션을 사용하여 JMS 지원을 활성화해야 합니다. @EnableBatchProcessing 어노테이션과 함께 사용해야 합니다. 아래는 예제 코드입니다.

@SpringBootApplication
@EnableBatchProcessing
@EnableJms
public class MyBatchApplication {
    
    public static void main(String[] args) {
        SpringApplication.run(MyBatchApplication.class, args);
    }
    
    // ...
}

위의 예제 코드는 Spring Boot와 Spring Batch를 함께 사용할 수 있도록 구성합니다. @EnableJms 어노테이션은 ActiveMQ와의 JMS 연동을 활성화합니다.

메시지 송수신

이제 ActiveMQ 큐를 통해 메시지를 송수신할 수 있습니다. 메시지를 보내기 위해서는 JmsTemplate를 사용해야 합니다. 아래는 메시지를 보내는 간단한 예제 코드입니다.

@Autowired
private JmsTemplate jmsTemplate;

public void sendMessage(String message) {
    jmsTemplate.convertAndSend("your-queue-name", message);
}

메시지를 수신하기 위해서는 @JmsListener 어노테이션을 사용하여 리스너를 등록해야 합니다. 아래는 메시지를 수신하는 예제 코드입니다.

@JmsListener(destination = "your-queue-name")
public void receiveMessage(String message) {
    System.out.println("Received message: " + message);
}

위의 예제 코드는 your-queue-name 큐에서 메시지를 수신하여 콘솔에 출력합니다.

이와 같이 Apache ActiveMQ와 Spring Batch를 함께 사용하면, 메시지 기반의 배치 처리 시스템을 구축할 수 있습니다. ActiveMQ를 통해 메시지를 송수신하고, Spring Batch를 사용하여 대용량의 데이터를 처리할 수 있습니다.