[java] JMS 제공자와의 상호작용 방법

Java Message Service (JMS)는 분산 시스템에서 메시지 기반 통신을 제공하는 API입니다. JMS를 사용하여 메시지를 보내고 받으려면 JMS 제공자와 상호작용해야 합니다. 이 글에서는 JMS 제공자와의 상호작용 방법에 대해 알아보겠습니다.

JMS 제공자란?

JMS 제공자는 JMS 메시지를 생성, 송신, 수신, 처리하는 역할을 합니다. JMS 제공자는 여러가지 종류가 있으며, 일반적으로 Apache ActiveMQ, IBM MQ, RabbitMQ 등이 사용됩니다. 각각의 JMS 제공자는 자체적인 설정과 프로토콜을 가지고 있습니다.

JMS 제공자에 연결하기

JMS 제공자에 연결하려면 해당 제공자의 라이브러리를 프로젝트에 추가해야 합니다. 이러한 라이브러리는 보통 Maven, Gradle 등의 의존성 관리 도구를 통해 가져올 수 있습니다.

먼저, JMS 연결을 위해 필요한 속성을 설정해야 합니다. 이러한 속성에는 JMS 제공자의 URL, 사용자 이름, 암호 등이 포함될 수 있습니다. 여기에는 예시가 있습니다.

String brokerUrl = "tcp://localhost:61616";
String username = "admin";
String password = "admin123";

다음으로 ConnectionFactory 객체를 생성해야 합니다. 이렇게 생성된 객체는 JMS 제공자와의 실제 연결을 관리합니다. 보통 JMS 제공자의 라이브러리에서 제공하는 클래스를 사용하면 됩니다.

ConnectionFactory factory = new ActiveMQConnectionFactory(brokerUrl, username, password);

마지막으로 Connection 객체를 생성하고, 이를 통해 JMS 제공자와의 연결을 수립합니다.

Connection connection = factory.createConnection();
connection.start();

JMS 메시지 송신하기

JMS 제공자에 연결한 후 메시지를 송신하려면 Session 객체와 MessageProducer 객체를 생성해야 합니다. Session 객체는 송신에 사용되는 세션을 관리하고, MessageProducer 객체는 메시지를 실제로 생성하고 송신합니다.

Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("myQueue");
MessageProducer producer = session.createProducer(destination);

이제 메시지를 생성하고 송신할 수 있습니다. JMS에서는 여러 가지 메시지 타입을 지원하며, TextMessage를 가장 많이 사용합니다.

TextMessage message = session.createTextMessage("Hello, JMS!");
producer.send(message);

송신이 완료되면 생성한 객체들을 닫아주어야 합니다.

producer.close();
session.close();

JMS 메시지 수신하기

JMS 제공자로부터 메시지를 수신하려면 MessageConsumer 객체와 MessageListener 인터페이스를 사용해야 합니다. MessageConsumer 객체는 메시지를 수신하는 데 사용되며, MessageListener 인터페이스는 메시지를 수신했을 때 호출되는 콜백 메서드를 정의합니다.

MessageConsumer consumer = session.createConsumer(destination);
consumer.setMessageListener(new MessageListener() {
    @Override
    public void onMessage(Message message) {
        if (message instanceof TextMessage) {
            try {
                TextMessage textMessage = (TextMessage) message;
                String text = textMessage.getText();
                System.out.println("Received message: " + text);
            } catch (JMSException e) {
                e.printStackTrace();
            }
        }
    }
});

메시지 수신과 처리가 완료되면 MessageConsumerSession을 닫아주어야 합니다.

// 메시지 수신이 더 이상 필요하지 않을 경우
consumer.close();
session.close();

마무리

이번 글에서는 JMS 제공자와의 상호작용 방법에 대해 알아보았습니다. JMS를 사용하여 메시지를 송수신하려면 JMS 제공자와 연결하고, 메시지를 생성하고 송신한 후, 메시지를 수신하여 처리해야 합니다. 이러한 과정을 통해 분산 시스템에서 간편하게 메시지 기반 통신을 구현할 수 있습니다.

더 자세한 JMS 사용법은 각 JMS 제공자의 공식 문서를 참고하시기 바랍니다.

참고 자료