[java] ActiveMQ와 RabbitMQ에서의 메시지 우선순위 설정

ActiveMQ와 RabbitMQ는 대표적인 메시지 브로커로서, 메시지를 전달하고 처리하는 기능을 제공합니다. 이러한 메시지 브로커들은 메시지 우선순위를 설정하여 중요한 메시지를 먼저 처리하도록 할 수 있는 기능을 제공합니다. 이번 글에서는 ActiveMQ와 RabbitMQ에서 메시지 우선순위를 설정하는 방법에 대해 알아보겠습니다.

ActiveMQ

ActiveMQ에서는 JMS(Java Messaging Service)의 메시지 우선순위 설정 기능을 제공하고 있습니다. JMS에서는 메시지에 우선순위 값을 부여하여 메시지 큐에 들어온 순서대로 처리되는 것이 아니라, 우선순위가 높은 메시지부터 먼저 처리하도록 할 수 있습니다.

우선 우선순위 값을 부여하기 위해 메시지 객체를 생성할 때, javax.jms.Message 인터페이스를 구현한 메시지 타입을 사용해야 합니다. 그리고 setJMSPriority 메서드를 사용하여 우선순위 값을 설정할 수 있습니다. 예를 들어, 우선순위가 가장 높은 메시지의 우선순위 값은 9, 가장 낮은 메시지의 우선순위 값은 0입니다.

// 메시지 객체 생성
javax.jms.Message message = session.createMessage();

// 우선순위 값 설정
message.setJMSPriority(9);

이렇게 우선순위 값을 설정한 후, 메시지를 큐에 보내면 ActiveMQ에서는 우선순위가 높은 메시지부터 처리하게 됩니다.

RabbitMQ

RabbitMQ에서는 메시지 우선순위 설정을 위해 메시지에 우선순위 값을 부여하는 방식을 제공합니다. RabbitMQ에서는 우선순위 큐(Priority Queue)를 사용하여 메시지를 처리하는데, 높은 우선순위의 메시지가 처리되기 전까지는 낮은 우선순위의 메시지가 처리되지 않도록 보장합니다.

우선순위 큐를 사용하기 위해 메시지를 생성할 때, basicProperties 속성에 priority 값을 설정해야 합니다. 우선순위 값의 범위는 0 이상 255 이하이며, 0이 가장 낮은 우선순위를 나타냅니다. 다음은 RabbitMQ에서 메시지의 우선순위 값을 설정하는 예제입니다.

// 메시지 속성 설정
AMQP.BasicProperties.Builder propertiesBuilder = new AMQP.BasicProperties.Builder();
propertiesBuilder.priority(9);

// 메시지 생성
byte[] messageBodyBytes = "Hello, RabbitMQ!".getBytes();
channel.basicPublish("", "my_queue", propertiesBuilder.build(), messageBodyBytes);

이렇게 우선순위 값을 설정한 후, 메시지를 큐에 보내면 RabbitMQ에서는 높은 우선순위의 메시지부터 처리하게 됩니다.

참고자료