[java] ActiveMQ와 RabbitMQ의 메시지 라우팅 방법

메시지 브로커 시스템을 구축하는 과정에서 라우팅은 매우 중요한 부분입니다. 라우팅은 메시지가 올바른 대상에게 전달되도록 도와주는 역할을 합니다. 여기서 우리는 ActiveMQ와 RabbitMQ의 메시지 라우팅 방법에 대해 알아보겠습니다.

ActiveMQ

ActiveMQ는 Java Message Service (JMS) 기반의 메시지 브로커 시스템입니다. ActiveMQ에서는 메시지 라우팅을 위해 다양한 방법을 제공합니다.

  1. Queue - 큐는 FIFO(First-In-First-Out) 방식으로 메시지를 처리합니다. 큐에 메시지를 보내면 첫 번째 메시지부터 처리되며, 여러 개의 컨슈머가 동시에 메시지를 처리할 수 있습니다.
// ActiveMQ 큐에 메시지 보내기
Queue queue = session.createQueue("example.queue");
MessageProducer producer = session.createProducer(queue);
TextMessage message = session.createTextMessage("Hello, ActiveMQ!");
producer.send(message);
  1. Topic - 토픽은 publish-subscribe 모델로 동작합니다. 메시지를 토픽에 발행하면 해당 토픽을 구독한 모든 컨슈머가 메시지를 받을 수 있습니다.
// ActiveMQ 토픽에 메시지 발행하기
Topic topic = session.createTopic("example.topic");
MessageProducer producer = session.createProducer(topic);
TextMessage message = session.createTextMessage("Hello, ActiveMQ!");
producer.send(message);
  1. Message Filtering - ActiveMQ에서는 메시지 필터링을 통해 특정 조건에 따라 메시지를 선택적으로 라우팅할 수 있습니다. MessageSelector를 사용하여 메시지를 필터링하고, 해당 조건에 맞는 메시지만을 처리할 수 있습니다.
// ActiveMQ 메시지 필터링하기
Queue queue = session.createQueue("example.queue");
MessageConsumer consumer = session.createConsumer(queue, "property = 'value'");
Message message = consumer.receive();

RabbitMQ

RabbitMQ는 AMQP(Advanced Message Queuing Protocol) 기반의 메시지 브로커 시스템입니다. RabbitMQ에서도 다양한 메시지 라우팅 방법을 제공합니다.

  1. Direct Exchange - 직접 라우팅 방식으로, 메시지를 특정 큐에 직접 전달합니다. 라우팅 키를 사용하여 메시지를 특정 큐에 라우팅할 수 있습니다.
// RabbitMQ Direct Exchange에 메시지 보내기
channel.basicPublish("exchange", "routingKey", null, "Hello, RabbitMQ!".getBytes());
  1. Fanout Exchange - 팬아웃 라우팅 방식으로, 메시지를 팬아웃 교환기에 발행하면 해당 교환기에 바인딩된 모든 큐로 메시지를 전송합니다.
// RabbitMQ Fanout Exchange에 메시지 보내기
channel.basicPublish("exchange", "", null, "Hello, RabbitMQ!".getBytes());
  1. Topic Exchange - 토픽 라우팅 방식으로, 라우팅 패턴을 사용하여 메시지를 여러 큐에 라우팅할 수 있습니다.
// RabbitMQ Topic Exchange에 메시지 보내기
channel.basicPublish("exchange", "topic.routing.key", null, "Hello, RabbitMQ!".getBytes());
  1. Header Exchange - 헤더 기반의 메시지 라우팅을 제공합니다. 메시지 헤더를 사용하여 라우팅 조건을 지정할 수 있습니다.
// RabbitMQ Header Exchange에 메시지 보내기
AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder()
    .header("customHeader", "value")
    .build();
channel.basicPublish("exchange", "", properties, "Hello, RabbitMQ!".getBytes());

두 메시지 브로커 시스템 모두 강력한 메시지 라우팅 기능을 제공하며, 상황에 맞게 적절한 방법을 선택하여 사용할 수 있습니다.

참고 자료