ActiveMQ는 오픈 소스 메시징 브로커입니다. 토픽 기반 메시지 전송은 메시지를 여러 구독자에게 동시에 전송하는 방식입니다. 이 방식은 발행-구독 모델로 알려져 있으며, 다수의 구독자들이 동일한 메시지를 수신할 수 있습니다.
ActiveMQ 설치
ActiveMQ는 Apache ActiveMQ 웹 사이트에서 다운로드할 수 있습니다. 이후 압축을 푼 뒤 설치 디렉토리로 이동합니다.
ActiveMQ 설정
ActiveMQ를 실행하기 전에 먼저 [ActiveMQ 설치 디렉토리]/conf/activemq.xml 파일을 수정해야 합니다. 이 파일에서 다음 설정을 찾고 수정합니다.
<broker>
...
<transportConnectors>
...
</transportConnectors>
...
</broker>
여기서 <transportConnectors>
태그 안에 다음 내용을 추가합니다.
<transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000"/>
위 설정은 MQTT(MQ Telemetry Transport) 프로토콜을 위한 연결을 허용합니다.
Java 클라이언트
ActiveMQ 토픽을 사용하기 위해서는 Java 클라이언트를 구성해야 합니다. 다음은 간단한 Java 코드 예시입니다.
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
public class TopicPublisher {
private static final String BROKER_URL = "tcp://localhost:61616";
private static final String TOPIC_NAME = "myTopic";
public static void main(String[] args) {
try {
// ActiveMQ 연결
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(BROKER_URL);
Connection connection = connectionFactory.createConnection();
connection.start();
// 세션 생성
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 토픽 생성
Destination destination = session.createTopic(TOPIC_NAME);
// 발행자 생성
MessageProducer producer = session.createProducer(destination);
// 메시지 생성
TextMessage message = session.createTextMessage();
message.setText("Hello, ActiveMQ!");
// 메시지 발송
producer.send(message);
// 클로즈
session.close();
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
위 코드는 ActiveMQ에 연결하여 “myTopic”이라는 토픽에 “Hello, ActiveMQ!”라는 메시지를 발송하는 간단한 예시입니다.
구독자 설정
토픽을 구독하기 위해서는 추가로 구독자를 설정해야 합니다. 다음은 구독자 코드 예시입니다.
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
public class TopicSubscriber {
private static final String BROKER_URL = "tcp://localhost:61616";
private static final String TOPIC_NAME = "myTopic";
public static void main(String[] args) {
try {
// ActiveMQ 연결
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(BROKER_URL);
Connection connection = connectionFactory.createConnection();
connection.start();
// 세션 생성
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 토픽 생성
Destination destination = session.createTopic(TOPIC_NAME);
// 구독자 생성
MessageConsumer consumer = session.createConsumer(destination);
// 메시지 수신
MessageListener listener = new MessageListener() {
public void onMessage(Message message) {
try {
if (message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message;
System.out.println("Received message: " + textMessage.getText());
}
} catch (JMSException e) {
e.printStackTrace();
}
}
};
consumer.setMessageListener(listener);
// 프로그램 종료 방지를 위한 대기
Thread.sleep(100000);
// 클로즈
session.close();
connection.close();
} catch (JMSException | InterruptedException e) {
e.printStackTrace();
}
}
}
위 코드는 “myTopic”이라는 토픽을 구독하고, 메시지가 도착할 때마다 해당 메시지를 출력하는 예시입니다.
결론
이제 ActiveMQ를 사용하여 토픽 기반 메시지 전송을 구현하는 방법에 대해 알아보았습니다. ActiveMQ를 활용하면 여러 구독자에게 동시에 메시지를 전송할 수 있어 실시간 통신에 유용합니다.
더 자세한 내용은 ActiveMQ 공식 문서를 참조하십시오.