Java Message Service (JMS)는 메시지 기반 애플리케이션 간 통신을 위한 표준 API입니다. JMS를 사용하면 메시지를 전송하고 수신하는 애플리케이션을 쉽게 구현할 수 있습니다. 이번 포스트에서는 JMS를 사용하여 메시지를 다중 수신하는 방법에 대해 알아보겠습니다.
JMS Queue 구성하기
첫 번째로, JMS Queue를 구성해야 합니다. JMS Queue는 메시지를 보내고 받는 대기열입니다. 다음은 JMS Queue를 구성하는 예제입니다.
import javax.jms.*;
public class JMSQueueConfig {
public static void main(String[] args) {
try {
// JNDI를 사용하여 InitialContext 생성
InitialContext initialContext = new InitialContext();
// ConnectionFactory를 Lookup하여 얻기
QueueConnectionFactory connectionFactory = (QueueConnectionFactory) initialContext.lookup("ConnectionFactory");
// Connection 생성
QueueConnection connection = connectionFactory.createQueueConnection();
// Session 생성
QueueSession session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
// Queue를 Lookup하여 얻기
Queue queue = (Queue) initialContext.lookup("MyQueue");
// MessageProducer 생성
QueueSender sender = session.createSender(queue);
// MessageConsumer 생성 (아래 내용으로 다중 수신 가능)
QueueReceiver receiver1 = session.createReceiver(queue);
QueueReceiver receiver2 = session.createReceiver(queue);
// Connection 시작
connection.start();
// ...
// 필요한 작업 수행
// ...
// Connection 닫기
connection.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
위의 예제에서는 QueueReceiver
를 생성하여 동일한 Queue
에서 메시지를 다중으로 수신할 수 있습니다.
받은 메시지 처리하기
다음은 QueueReceiver
를 사용하여 받은 메시지를 처리하는 예제입니다.
import javax.jms.*;
public class MessageHandler implements MessageListener {
@Override
public void onMessage(Message message) {
try {
if (message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message;
String text = textMessage.getText();
// 받은 메시지 처리하기
System.out.println("Received message: " + text);
}
} catch (JMSException ex) {
ex.printStackTrace();
}
}
}
위의 예제에서는 MessageListener
인터페이스를 구현하여 메시지를 비동기적으로 수신합니다. 수신한 메시지는 onMessage()
메소드를 통해 처리할 수 있습니다. 이 메소드를 필요에 따라 구현하여 원하는 작업을 수행할 수 있습니다.
Listener 등록하기
마지막으로, QueueReceiver
에 MessageListener
를 등록하여 메시지 수신을 시작해야 합니다. 다음은 QueueReceiver
에 MessageListener
를 등록하는 예제입니다.
import javax.jms.*;
public class JMSMessageListenerConfig {
public static void main(String[] args) {
try {
// JNDI를 사용하여 InitialContext 생성
InitialContext initialContext = new InitialContext();
// ConnectionFactory를 Lookup하여 얻기
QueueConnectionFactory connectionFactory = (QueueConnectionFactory) initialContext.lookup("ConnectionFactory");
// Connection 생성
QueueConnection connection = connectionFactory.createQueueConnection();
// Session 생성
QueueSession session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
// Queue를 Lookup하여 얻기
Queue queue = (Queue) initialContext.lookup("MyQueue");
// MessageConsumer 생성
QueueReceiver receiver = session.createReceiver(queue);
// MessageListener 등록
receiver.setMessageListener(new MessageHandler());
// Connection 시작
connection.start();
// ...
// 필요한 작업 수행
// ...
// Connection 닫기
connection.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
위의 예제에서는 QueueReceiver
에 MessageHandler
를 등록하여 메시지를 처리할 준비를 합니다. 등록된 MessageListener
는 QueueReceiver
로부터 메시지를 비동기적으로 받게 됩니다.
결론
JMS를 사용하여 메시지를 다중 수신하는 방법에 대해 알아보았습니다. JMS Queue를 구성하고 QueueReceiver
를 생성하여 동일한 Queue
에서 메시지를 다중으로 수신하는 방법을 살펴보았습니다. 또한, MessageListener
를 구현하여 받은 메시지를 처리하는 방법을 알아보았습니다. 이를 통해 복잡한 메시지 기반 애플리케이션을 간편하게 구현할 수 있습니다.