더북(TheBook)

커맨드/응답 메시징

클라이언트는 CommandProducer 인터페이스를 이용하여 커맨드 메시지를 서비스에 보냅니다.

CommandProducer commandProducer = ...;

Map<String, String> extraMessageHeaders = Collections.emptyMap();

String commandId = commandProducer.send("CustomerCommandChannel", new DoSomethingCommand(), "ReplyToChannel", extraMessageHeaders);

서비스는 CommandDispatcher 클래스로 커맨드 메시지를 소비합니다. 다음 코드처럼 Command DispatcherMessageConsumer 인터페이스를 통해 특정 이벤트를 구독하고 각 커맨드 메시지를 적절한 핸들러 메서드로 디스패치합니다.

CommandHandlers commandHandlers = CommandHandlersBuilder.fromChannel(commandChannel).onMessage(DoSomethingCommand.class, (command) -> {
  ... ; return withSuccess(); }).build();

CommandDispatcher dispatcher = new CommandDispatcher("subscribeId",
commandHandlers, messageConsumer, messageProducer);

이벤추에이트 트램 프레임워크는 자바 애플리케이션용 트랜잭셔널 메시징을 기본 지원하며, 트랜잭션이 걸린 상태에서 메시지를 주고받을 수 있는 저수준 API도 함께 제공합니다. 또 도메인 이벤트를 발행/소비하고 커맨드를 전송/처리하는 고수준 API도 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.