Apache ActiveMQ는 오픈 소스 메시지 브로커로, 메시지 기반 애플리케이션을 개발하기 위한 강력한 도구입니다. 이번 글에서는 Apache ActiveMQ를 사용하여 프로듀서-컨슈머 패턴을 어떻게 구현할 수 있는지 알아보겠습니다.
프로듀서-컨슈머 패턴이란?
프로듀서-컨슈머 패턴은 메시지 큐를 사용하여 애플리케이션 간의 통신을 하는 패턴입니다. 프로듀서는 메시지를 생성하고 큐에 넣어두며, 컨슈머는 큐에서 메시지를 꺼내와 처리합니다. 이 패턴을 사용하면 비동기적으로 메시지를 주고받을 수 있으며, 메시지의 생산과 소비가 분리되기 때문에 애플리케이션 간의 결합도를 낮출 수 있습니다.
Apache ActiveMQ 설정
먼저, Apache ActiveMQ를 설치하고 설정해야합니다. ActiveMQ 홈페이지에서 최신 버전을 다운로드하고 압축을 푼 후에, conf/activemq.xml
파일을 열어 다음과 같이 수정합니다:
<transportConnectors>
<transportConnector name="tcp" uri="tcp://localhost:61616"/>
</transportConnectors>
위 설정은 ActiveMQ가 tcp://localhost:61616
주소로 메시지를 수신할 수 있도록 설정하는 것입니다.
프로듀서 구현
프로듀서는 ActiveMQ 브로커에 연결하여 메시지를 큐에 넣어주는 역할을 합니다. 다음은 Java를 사용하여 프로듀서를 구현하는 예제 코드입니다:
import javax.jms.*;
import org.apache.activemq.ActiveMQConnectionFactory;
public class Producer {
public static void main(String[] args) {
try {
// ActiveMQ 연결 설정
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = connectionFactory.createConnection();
// 세션 생성
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 큐 생성
Destination destination = session.createQueue("myQueue");
// 메시지 전송자 생성
MessageProducer producer = session.createProducer(destination);
// 메시지 생성
TextMessage message = session.createTextMessage("Hello, ActiveMQ!");
// 메시지 전송
producer.send(message);
// 리소스 해제
producer.close();
session.close();
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
위 코드는 ActiveMQ 브로커에 연결하여 myQueue
라는 큐에 “Hello, ActiveMQ!”라는 메시지를 보내는 프로듀서를 생성합니다.
컨슈머 구현
컨슈머는 ActiveMQ 브로커에서 메시지를 수신하여 처리하는 역할을 합니다. 다음은 Java를 사용하여 컨슈머를 구현하는 예제 코드입니다:
import javax.jms.*;
import org.apache.activemq.ActiveMQConnectionFactory;
public class Consumer {
public static void main(String[] args) {
try {
// ActiveMQ 연결 설정
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = connectionFactory.createConnection();
// 연결 시작
connection.start();
// 세션 생성
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 큐 생성
Destination destination = session.createQueue("myQueue");
// 메시지 수신자 생성
MessageConsumer consumer = session.createConsumer(destination);
// 메시지 수신 대기
Message message = consumer.receive();
if (message instanceof TextMessage) {
// 텍스트 메시지 처리
TextMessage textMessage = (TextMessage) message;
System.out.println("Received message: " + textMessage.getText());
}
// 리소스 해제
consumer.close();
session.close();
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
위 코드는 ActiveMQ 브로커에서 myQueue
라는 큐에서 메시지를 수신하여 출력하는 컨슈머를 생성합니다.
결론
Apache ActiveMQ를 사용하여 프로듀서-컨슈머 패턴을 구현하는 방법을 알아봤습니다. 이러한 패턴을 사용하면 애플리케이션 간의 비동기적인 통신을 쉽게 구현할 수 있고, 메시지 큐를 통해 느슨한 결합을 유지할 수 있습니다. ActiveMQ를 사용하면 신뢰성과 확장성이 뛰어난 메시지 시스템을 구축할 수 있습니다.