[java] JMS를 사용하여 비동기 메시지 송수신 구현
Java Message Service (JMS)는 Java 언어로 작성된 애플리케이션 간에 비동기 메시지를 송수신하기 위한 API입니다. JMS를 사용하면 메시지를 보내는 쪽과 받는 쪽이 서로 독립적으로 동작할 수 있으며, 시스템 간의 결합도를 낮출 수 있습니다. 이번 포스트에서는 JMS를 사용하여 비동기 메시지 송수신을 구현하는 방법에 대해 알아보겠습니다.
JMS 구성 요소
JMS는 크게 두 가지 구성 요소로 구성됩니다.
- Producer(생산자): 메시지를 생성하고 JMS 서버 또는 큐에 전송하는 역할을 합니다.
- Consumer(소비자): JMS 서버 또는 큐에서 메시지를 수신하고 처리하는 역할을 합니다.
JMS 구현 단계
JMS를 사용하여 비동기 메시지 송수신을 구현하는 단계는 다음과 같습니다.
- JMS Provider(예: Apache ActiveMQ)를 설치하고 구성합니다.
- JMS API를 사용하여 메시지 생성과 전송을 위한 Producer를 구현합니다.
- JMS API를 사용하여 메시지 수신 및 처리를 위한 Consumer를 구현합니다.
예제 코드
아래는 JMS를 사용하여 비동기 메시지 송수신을 구현하는 예제 코드입니다.
Producer.java
import javax.jms.*;
import org.apache.activemq.ActiveMQConnectionFactory;
public class Producer {
public static void main(String[] args) throws JMSException {
// JMS 연결을 위한 ConnectionFactory 생성
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
// ConnectionFactory를 사용하여 Connection 생성
Connection connection = connectionFactory.createConnection();
// JMS 세션 생성
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// Destination(최종 목적지) 생성
Destination destination = session.createQueue("myQueue");
// MessageProducer 생성
MessageProducer producer = session.createProducer(destination);
// 메시지 생성
TextMessage message = session.createTextMessage();
message.setText("Hello, JMS!");
// 메시지 전송
producer.send(message);
// 연결 및 리소스 해제
producer.close();
session.close();
connection.close();
}
}
Consumer.java
import javax.jms.*;
import org.apache.activemq.ActiveMQConnectionFactory;
public class Consumer implements MessageListener {
public static void main(String[] args) throws JMSException {
// JMS 연결을 위한 ConnectionFactory 생성
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
// ConnectionFactory를 사용하여 Connection 생성
Connection connection = connectionFactory.createConnection();
// JMS 세션 생성
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// Destination(최종 목적지) 생성
Destination destination = session.createQueue("myQueue");
// MessageConsumer 생성
MessageConsumer consumer = session.createConsumer(destination);
// MessageListener 등록
consumer.setMessageListener(new Consumer());
// Connection 시작
connection.start();
}
@Override
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();
}
}
}
위의 예제 코드에서는 Apache ActiveMQ를 JMS Provider로 사용하고 있습니다. ActiveMQ를 설치하고 실행한 후에 Producer와 Consumer를 실행하면 Producer가 메시지를 생성하여 Queue에 전송하고, Consumer가 Queue에서 메시지를 수신하여 처리하는 과정을 확인할 수 있습니다.
결론
JMS를 사용하여 비동기 메시지 송수신을 구현하면 애플리케이션 간의 결합도를 낮추고, 확장성과 유연성을 높일 수 있습니다. 이번 포스트에서는 JMS를 사용하여 비동기 메시지 송수신을 구현하는 방법에 대해 알아보았습니다. JMS를 사용하여 복잡한 시스템 아키텍처를 구현하는 데 도움이 될 것입니다.