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를 구현하여 받은 메시지를 처리하는 방법을 알아보았습니다. 이를 통해 복잡한 메시지 기반 애플리케이션을 간편하게 구현할 수 있습니다.