[java] ActiveMQ에서 메시지 유효성 검사

ActiveMQ는 Java로 구현된 오픈 소스 메시지 브로커로, 메시지 큐와 토픽 기반 메시지 패턴을 지원합니다. 이를 통해 애플리케이션 간에 비동기적인 통신을 가능하게 해줍니다.

ActiveMQ를 사용하면 메시지 유효성을 검사하여 잘못된 메시지가 큐나 토픽에 전달되는 것을 방지할 수 있습니다. 이번 포스트에서는 ActiveMQ에서 메시지 유효성 검사를 어떻게 수행하는지 알아보겠습니다.

1. 메시지 클래스 정의하기

먼저 메시지를 표현하는 클래스를 정의해야 합니다. 이 클래스는 Serializable 인터페이스를 구현해야 하며, 유효성 검사를 위한 필드와 메서드를 포함해야 합니다. 예를 들어, 아래와 같은 Message 클래스가 있다고 가정해봅시다.

import java.io.Serializable;

public class Message implements Serializable {
    private String content;
    private int priority;

    public Message(String content, int priority) {
        this.content = content;
        this.priority = priority;
    }

    // 유효성 검사 메서드
    public boolean isValid() {
        return priority >= 1 && priority <= 10;
    }
    
    // Getter와 Setter 생략
}

위의 예시에서 Message 클래스는 contentpriority라는 두 개의 필드를 가지며, isValid() 메서드를 통해 유효성을 검사합니다. priority 필드는 1부터 10 사이의 값이어야 유효하다고 가정하였습니다.

2. 메시지 유효성 검사하기

이제 ActiveMQ를 사용하여 메시지를 보내기 전에 유효성을 검사하는 코드를 작성해보겠습니다. 아래는 Producer 클래스에서 유효성 검사를 수행하는 예시 코드입니다.

import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;

public class Producer {
    public static void main(String[] args) {
        // ActiveMQ 연결 설정
        String brokerUrl = "tcp://localhost:61616";
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerUrl);

        try {
            // Connection 생성
            Connection connection = connectionFactory.createConnection();
            connection.start();

            // Session 생성
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

            // Queue 생성
            Queue queue = session.createQueue("message.queue");

            // MessageProducer 생성
            MessageProducer producer = session.createProducer(queue);

            // 유효성 검사를 통과한 메시지 전송
            Message message = new Message("Hello, ActiveMQ!", 5);

            if (message.isValid()) {
                ObjectMessage objMessage = session.createObjectMessage(message);
                producer.send(objMessage);
                System.out.println("메시지를 보냈습니다.");
            } else {
                System.out.println("유효하지 않은 메시지입니다.");
            }

            // 리소스 해제
            producer.close();
            session.close();
            connection.close();
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
}

위의 예시에서 Producer 클래스는 ActiveMQ에 연결하고 message.queue라는 큐에 메시지를 전송하는 작업을 수행합니다. Message 클래스를 생성하여 유효성 검사를 한 후, 유효한 메시지인 경우 ObjectMessage로 변환하여 큐에 전송합니다.

3. 메시지 수신하기

마지막으로 메시지를 수신하는 코드를 작성해보겠습니다. 아래는 Consumer 클래스에서 메시지를 수신하는 예시 코드입니다.

import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;

public class Consumer {
    public static void main(String[] args) {
        // ActiveMQ 연결 설정
        String brokerUrl = "tcp://localhost:61616";
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerUrl);

        try {
            // Connection 생성
            Connection connection = connectionFactory.createConnection();
            connection.start();

            // Session 생성
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

            // Queue 생성
            Queue queue = session.createQueue("message.queue");

            // MessageConsumer 생성
            MessageConsumer consumer = session.createConsumer(queue);

            // 메시지 수신
            Message message = consumer.receive();

            // ObjectMessage인 경우 Message 클래스로 역직렬화하여 사용할 수 있습니다.
            if (message instanceof ObjectMessage) {
                ObjectMessage objMessage = (ObjectMessage) message;
                Message receivedMessage = (Message) objMessage.getObject();
                System.out.println("메시지를 수신했습니다: " + receivedMessage.getContent());
            }

            // 리소스 해제
            consumer.close();
            session.close();
            connection.close();
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
}

위의 예시에서 Consumer 클래스는 ActiveMQ에 연결하고 message.queue라는 큐에서 메시지를 수신하는 작업을 수행합니다. 수신된 메시지는 ObjectMessage로 역직렬화하여 Message 클래스로 변환한 후, 메시지의 내용을 출력합니다.

이제 ActiveMQ에서 메시지 유효성 검사를 수행하는 방법을 알아보았습니다. 메시지 유효성 검사를 통해 잘못된 메시지가 큐나 토픽에 전달되지 않도록 보장할 수 있습니다.

참고 자료