Apache ActiveMQ는 AMQP, STOMP, MQTT, OpenWire 등 다양한 프로토콜을 지원하는 엔터프라이즈 메시지 브로커다. Java 기반이며, JMS(Java Message Service) 표준 구현체로 기업 환경에 널리 사용된다.
ActiveMQ 아키텍처
Producer → Broker → Consumer
│
┌───────┴───────┐
Queue Topic
(1:1 전달) (발행-구독)
│ │
Consumer Subscriber(들)
(하나만 수신) (모두 수신)
메시지 영속성:
- KahaDB (기본): 내장 저장소
- JDBC: 외부 DB 저장
- LevelDB: 고성능 KV 저장소
Java / Spring 예시
java
// Spring Boot + ActiveMQ
// build.gradle: implementation 'org.springframework.boot:spring-boot-starter-activemq'
@Configuration
public class ActiveMQConfig {
@Bean
public ConnectionFactory connectionFactory() {
return new ActiveMQConnectionFactory("tcp://localhost:61616");
}
@Bean
public JmsTemplate jmsTemplate(ConnectionFactory cf) {
return new JmsTemplate(cf);
}
}
// 메시지 전송
@Service
public class OrderProducer {
@Autowired JmsTemplate jmsTemplate;
public void send(Order order) {
jmsTemplate.convertAndSend("order.queue", order);
}
}
// 메시지 수신
@Component
public class OrderConsumer {
@JmsListener(destination = "order.queue")
public void receive(Order order) {
System.out.println("처리: " + order.getId());
}
}
ActiveMQ vs ActiveMQ Artemis
| 항목 | ActiveMQ Classic | ActiveMQ Artemis |
|---|
| 아키텍처 | 기존 | 비동기 NIO 기반 |
| 성능 | 보통 | 높음 |
| 영속성 | KahaDB | Journal 기반 |
| 프로토콜 | JMS, AMQP, MQTT | 동일 + 개선 |
| HQ 통합 | X | HornetQ 기반 |
Dead Letter Queue (DLQ) 처리
xml
<!-- activemq.xml 설정 -->
<policyEntry queue="order.queue">
<deadLetterStrategy>
<individualDeadLetterStrategy
queuePrefix="DLQ."
useQueueForQueueMessages="true"
expiration="604800000" /> <!-- 7일 보존 -->
</deadLetterStrategy>
<redeliveryPolicy maximumRedeliveries="3" redeliveryDelay="5000" />
</policyEntry>
관련 문서