Categories: Camel프레임워크

[Camel in Action] 6-2. Camel JMS/ActiveMQ 컴포넌트로 메시지 큐 연동하기

왜 메시지 큐가 필요한가?

시스템 간 직접 통신은 한쪽이 느려지거나 다운되면 전체가 영향을 받습니다. 메시지 큐를 중간에 두면 생산자와 소비자를 완전히 분리할 수 있습니다. Camel의 JMS 컴포넌트는 ActiveMQ, RabbitMQ, IBM MQ 등 어떤 JMS 브로커와도 동일한 코드로 연동됩니다.

ActiveMQ 기본 연동

Maven에 camel-activemq 의존성을 추가하고 ConnectionFactory를 설정하면 바로 사용할 수 있습니다.

// Spring XML 설정
<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
  <property name="brokerURL" value="tcp://localhost:61616"/>
</bean>

// 라우트
from("activemq:queue:orders")
  .log("주문 수신: ${body}")
  .to("activemq:queue:processed-orders");

큐(Queue)는 한 소비자만 메시지를 받고, 토픽(Topic)은 구독한 모든 소비자가 받습니다. activemq:queue:이름 vs activemq:topic:이름으로 구분합니다.

트랜잭션과 메시지 신뢰성

중요한 메시지는 반드시 트랜잭션 처리가 필요합니다. JMS 컴포넌트는 acknowledgment 모드를 통해 메시지 유실을 방지합니다.

  • AUTO_ACKNOWLEDGE: 메시지를 받자마자 확인 (기본값, 빠르지만 처리 중 오류 시 유실 가능)
  • CLIENT_ACKNOWLEDGE: 처리 완료 후 직접 확인 (안전)
  • transacted=true: JMS 트랜잭션으로 롤백 지원
from("activemq:queue:orders?transacted=true")
  .process(exchange -> {
    // 처리 중 예외 발생 시 자동 롤백, 메시지 재전송
    processOrder(exchange.getIn().getBody(String.class));
  });

Dead Letter Queue 패턴

반복해서 실패하는 메시지는 무한 재시도를 막기 위해 Dead Letter Queue(DLQ)로 이동시킵니다. ActiveMQ는 기본적으로 6번 재시도 후 ActiveMQ.DLQ로 보냅니다.

// ActiveMQ 재시도 정책 커스터마이징
<redeliveryPolicy maximumRedeliveries="3" redeliveryDelay="1000"/>

DLQ를 모니터링하면 처리 실패한 메시지를 나중에 수동으로 재처리하거나 원인을 분석할 수 있습니다.

Request-Reply 패턴

동기식 처리가 필요할 때는 JMS의 Request-Reply 패턴을 사용합니다. Camel이 임시 응답 큐를 자동으로 생성해서 관리해 줍니다.

// 요청자
Object response = template.requestBody("activemq:queue:calculate", "10+20");

// 처리자
from("activemq:queue:calculate")
  .bean(CalculatorBean.class);

내부적으로 JMS의 replyTo 헤더와 correlationId를 활용하므로, 개발자는 복잡한 메시지 매칭 로직을 직접 구현할 필요가 없습니다.

zerg96

Share
Published by
zerg96

Recent Posts

[Apache Camel] 2025년 최신 트렌드 – AI 통합과 서버리스 Camel의 미래

2025년 Apache Camel의 최신 트렌드를 분석합니다. AI/LLM 통합 컴포넌트, 서버리스 배포, Camel K 진화, WebAssembly…

9시간 ago

[Camel in Action] 완결편 – Apache Camel 전체 여정 회고와 다음 단계

Camel in Action을 완독한 후 Apache Camel의 전체 그림을 다시 정리합니다. 핵심 철학, 학습 경로,…

9시간 ago

[Camel in Action] 실전편 – Camel 마이그레이션 가이드 2.x에서 4.x까지

Apache Camel 2.x에서 3.x, 4.x로 마이그레이션하는 단계별 가이드입니다. 주요 API 변경사항, 제거된 컴포넌트, 자동화 도구…

9시간 ago

[Camel in Action] 실전편 – Camel 라우트 디버깅 기법과 문제 해결 가이드

Apache Camel 라우트에서 발생하는 문제를 디버깅하고 해결하는 실전 기법을 설명합니다. 로그 분석, breakpoint 디버깅, Tracer,…

9시간 ago

[Camel in Action] 실전편 – Camel 도입 전 반드시 알아야 할 것들

Apache Camel을 프로젝트에 도입하기 전 알아야 할 핵심 사항을 정리합니다. 학습 곡선, 도입 비용, 적합한…

9시간 ago

[Camel in Action] 실전편 – Enterprise Integration Patterns 20가지 핵심 정리

엔터프라이즈 통합 패턴(EIP) 20가지를 Apache Camel 코드와 함께 한 번에 정리합니다. 메시징 채널, 메시지 라우팅,…

9시간 ago