[java] ActiveMQ에서 메시지 변환하기

ActiveMQ는 Java Message Service (JMS) 구현체로서, 메시지 큐를 통해 메시지를 교환할 수 있도록 도와줍니다. 때때로 ActiveMQ에서 수신한 메시지를 다른 형식으로 변환해야 할 때가 있습니다. 이번 블로그 포스트에서는 ActiveMQ에서 메시지를 변환하는 방법을 알아보겠습니다.

1. MessageConverter 인터페이스

MessageConverter는 JMS 메시지를 변환하는데 사용되는 인터페이스입니다. ActiveMQ에는 이미 구현된 SimpleMessageConverter가 포함되어 있어 간편하게 MessageConverter를 사용할 수 있습니다.

2. 메시지 변환하기

먼저, ActiveMQ에서 메시지를 받아오는 메서드를 작성해보겠습니다:

public void receiveMessage(Message message) {
    try {
        if (message instanceof TextMessage) {
            TextMessage textMessage = (TextMessage) message;
            String text = textMessage.getText();
            System.out.println("Received message: " + text);
        } else if (message instanceof BytesMessage) {
            BytesMessage bytesMessage = (BytesMessage) message;
            // 바이트 메시지 변환 로직 작성
        } else {
            // 다른 유형의 메시지에 대한 변환 로직 작성
        }
    } catch (JMSException e) {
        e.printStackTrace();
    }
}

위 코드에서는 메시지의 유형을 확인한 후 해당 유형에 맞게 변환 로직을 작성하고 있습니다.

3. 메시지를 특정 형식으로 변환하기

ActiveMQ에서 받은 메시지를 특정 형식으로 변환하고 싶다면 MessageConverter를 사용하면 됩니다. 예를 들어, JSON 형식으로 변환해보겠습니다.

public void receiveMessage(Message message) {
    try {
        if (message instanceof TextMessage) {
            TextMessage textMessage = (TextMessage) message;
            String text = textMessage.getText();
            System.out.println("Received message: " + text);

            // JSON 변환
            ObjectMapper objectMapper = new ObjectMapper();
            MyCustomObject myObject = objectMapper.readValue(text, MyCustomObject.class);
        } else {
            // 다른 유형의 메시지에 대한 변환 로직 작성
        }
    } catch (JMSException | IOException e) {
        e.printStackTrace();
    }
}

위 코드에서는 JSON 형식으로 변환하기 위해 Jackson 라이브러리를 사용하고 있습니다. MyCustomObject는 JSON을 파싱하여 변환할 객체입니다.

4. 메시지 변환기 설정하기

메시지 변환기를 사용하기 위해서는 ActiveMQ의 MessageListenerContainer에서 변환기를 설정해야 합니다. 다음은 변환기를 설정하는 예시입니다:

@Bean
public DefaultMessageListenerContainer messageListenerContainer(ConnectionFactory connectionFactory) {
    DefaultMessageListenerContainer container = new DefaultMessageListenerContainer();
    container.setConnectionFactory(connectionFactory);
    container.setDestinationName("myQueue");
    container.setMessageListener(myMessageListener());
    container.setMessageConverter(new SimpleMessageConverter());
    return container;
}

위 코드에서 setMessageConverter 메서드를 이용해 변환기를 설정하고 있습니다.

5. 결론

ActiveMQ에서 메시지를 변환하기 위해 MessageConverter 인터페이스를 사용하고, 실제 변환 로직을 작성하는 방법을 살펴보았습니다. 이를 통해 ActiveMQ에서 받은 메시지를 원하는 형식으로 변환할 수 있습니다.

참고 자료