Spring AMQP, AMQP 1.0 지원 시작!
Spring AMQP 4.1.0-M1 출시, AMQP 1.0 프로토콜 지원을 위한 spring-amqp-client 모듈 추가
spring-amqp-client는 ProtonJ 2 Client 라이브러리 기반으로, Spring-friendly API 제공
AmqpClient를 통해 AMQP 1.0 피어와 메시지 교환, WebClient 및 JdbcClient와 유사한 API 제공
@EnableAmqp 어노테이션을 통해 spring-amqp-client 인프라 노출, @AmqpListener 구현 계획 발표
spring-amqp-client 모듈 아키텍처
spring-amqp-client 모듈은 AMQP 1.0 프로토콜과의 상호 작용을 위한 Spring-friendly 컴포넌트를 제공한다. ProtonJ 2 Client 라이브러리(ProtonJ 2 Client Library) 기반으로 구축되었으며, 기존 spring-amqp 코어 모듈의 API를 기반으로 한다. spring-amqp-client는 RabbitMQ 관련 의존성을 가지지 않지만, RabbitMQ 브로커(RabbitMQ Broker)와 함께 사용 가능하다. SingleAmqpConnectionFactory를 통해 ProtonJ 연결(ProtonJ Connection)을 공유하여 소비자(Consumer)와 생산자(Producer) 간의 효율적인 메시지 교환을 지원한다.
AmqpClient를 활용한 메시지 전송
AmqpClient는 WebClient 및 JdbcClient와 유사한 설계를 가진 저수준 API를 제공한다. 빌더 패턴(Builder Pattern)을 통해 설정 가능하며, to(address) 및 from(address) 연산을 위한 플루언트 API를 지원한다. 예시 코드에서 볼 수 있듯이, 메시지 전송 시 우선순위(Priority), 헤더(Header), 메시지 ID(Message ID) 등 다양한 옵션 설정이 가능하다. 또한, durable(지속성) 설정을 통해 메시지 신뢰성을 보장할 수 있다. 이러한 유연성은 개발자가 AMQP 1.0 프로토콜의 세부 사항을 제어하면서도 Spring의 편리함을 누릴 수 있게 한다.
AmqpMessageListenerContainer의 역할
AmqpMessageListenerContainer는 Spring Messaging 프로젝트의 다른 리스너 컨테이너와 동일한 역할을 수행한다. AMQP 주소(AMQP Address)를 구독하고, 제공된 MessageListener에 Spring AMQP 메시지를 이벤트 기반 방식으로 전달한다. 예시 코드에서 setQueueNames, setConsumersPerQueue, setAutoAccept, setReceiveTimeout 등의 설정을 통해 컨테이너 동작을 제어할 수 있다. 또한, DebugInterceptor와 같은 AdviceChain을 설정하여 메시지 처리 과정을 디버깅할 수 있다.
Spring AMQP 생태계 확장
@EnableAmqp 어노테이션을 통해 spring-amqp-client 인프라를 노출하고, org.apache.qpid.protonj2.client.Client 빈을 제공한다. 향후 릴리스에서는 @AmqpListener 어노테이션(Annotation)을 구현하여 @RabbitListener, @KafkaListener, @JmsListener 또는 @ServiceActivator와 유사한 기능을 제공할 예정이다. 이는 개발자가 더욱 간편하게 AMQP 메시징(Messaging)을 활용할 수 있도록 돕는다. 또한, sendAndReceive() 및 receiveAndReply() 연산 구현과 트랜잭션 지원(Transaction Support) 계획을 통해 기능 확장을 예고했다.