Java Message Service(JMS)는 Java 애플리케이션 간에 비동기적으로 메시지를 전송할 수 있는 API입니다. JMS는 메시지를 보내고 받는 애플리케이션 간의 결합도를 낮추고 확장성과 유연성을 제공하는 데 사용됩니다. 이제 JMS를 사용하여 메시지 운반자를 개발하는 방법을 알아보겠습니다.
1. JMS Provider 설정
먼저 JMS Provider(예: Apache ActiveMQ, IBM MQ, RabbitMQ 등)를 선택하고 해당 Provider를 설치하고 설정해야 합니다. JMS Provider는 애플리케이션 간의 메시지 전송을 담당하는 중개자 역할을 합니다.
2. JMS Queue 또는 Topic 생성
JMS Provider에서 메시지를 보내고 받을 수 있는 Queue 또는 Topic을 생성해야 합니다. Queue는 단일 대상에게 메시지를 보내는 데 사용되고, Topic은 여러 구독자에게 메시지를 보내는 데 사용됩니다. 이 단계에서는 JMS Provider의 관리자 도구를 사용하여 Queue 또는 Topic을 생성합니다.
3. JMS Connection Factory 설정
JMS 애플리케이션은 JMS Provider와 통신하기 위해 Connection Factory를 설정해야 합니다. Connection Factory는 JMS Provider에 대한 연결을 만들어주는 역할을 합니다. 이때 Connection Factory의 URL, 사용자 이름, 비밀번호 등이 필요합니다.
4. 메시지 보내기
JMS Provider에 연결된 JMS 애플리케이션에서 메시지를 보내려면 다음과 같은 방법을 사용합니다.
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
public class MessageSender {
public static void main(String[] args) {
try {
// 1. Connection Factory 생성
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
// 2. Connection 생성
Connection connection = connectionFactory.createConnection();
// 3. Session 생성
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 4. 메시지를 보낼 Queue 또는 Topic 선택
Destination destination = session.createQueue("QUEUE_NAME");
// 5. MessageProducer 생성
MessageProducer producer = session.createProducer(destination);
// 6. 메시지 생성
TextMessage message = session.createTextMessage("Hello, JMS!");
// 7. 메시지 보내기
producer.send(message);
// 8. 연결 종료
session.close();
connection.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
위의 예제는 Apache ActiveMQ를 사용하여 메시지를 보내는 Java 애플리케이션의 코드입니다. Connection Factory, Queue 또는 Topic 이름을 적절하게 수정하고 실행하면 메시지가 보내집니다.
5. 메시지 받기
JMS Provider로부터 메시지를 받으려면 다음과 같은 방법을 사용합니다.
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;
public class MessageReceiver {
public static void main(String[] args) {
try {
// 1. Connection Factory 생성
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
// 2. Connection 생성
Connection connection = connectionFactory.createConnection();
// 3. Session 생성
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 4. 메시지를 받을 Queue 또는 Topic 선택
Destination destination = session.createQueue("QUEUE_NAME");
// 5. MessageConsumer 생성
MessageConsumer consumer = session.createConsumer(destination);
// 6. 메시지 받기
connection.start();
TextMessage message = (TextMessage) consumer.receive();
System.out.println("Received message: " + message.getText());
// 7. 연결 종료
session.close();
connection.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
위의 예제는 Apache ActiveMQ를 사용하여 메시지를 받는 Java 애플리케이션의 코드입니다. Connection Factory, Queue 또는 Topic 이름을 적절하게 수정하고 실행하면 메시지를 받을 수 있습니다.
6. 요약
위의 단계를 따라 JMS Provider를 설정하고 메시지 운반자를 개발할 수 있습니다. JMS는 Java 애플리케이션 간의 비동기적인 통신을 가능하게 하며, 대용량의 메시지 처리와 분산 시스템에서의 확장성을 제공합니다. JMS Provider에는 여러 옵션이 있으며, 애플리케이션 요구 사항에 맞게 선택하여 사용할 수 있습니다.