커맨드/응답 메시징
클라이언트는 CommandProducer 인터페이스를 이용하여 커맨드 메시지를 서비스에 보냅니다.
CommandProducer commandProducer = ...; Map<String, String> extraMessageHeaders = Collections.emptyMap(); String commandId = commandProducer.send("CustomerCommandChannel", new DoSomethingCommand(), "ReplyToChannel", extraMessageHeaders);
서비스는 CommandDispatcher 클래스로 커맨드 메시지를 소비합니다. 다음 코드처럼 Command Dispatcher는 MessageConsumer 인터페이스를 통해 특정 이벤트를 구독하고 각 커맨드 메시지를 적절한 핸들러 메서드로 디스패치합니다.
CommandHandlers commandHandlers = CommandHandlersBuilder.fromChannel(commandChannel).onMessage(DoSomethingCommand.class, (command) -> { ... ; return withSuccess(); }).build(); CommandDispatcher dispatcher = new CommandDispatcher("subscribeId", commandHandlers, messageConsumer, messageProducer);
이벤추에이트 트램 프레임워크는 자바 애플리케이션용 트랜잭셔널 메시징을 기본 지원하며, 트랜잭션이 걸린 상태에서 메시지를 주고받을 수 있는 저수준 API도 함께 제공합니다. 또 도메인 이벤트를 발행/소비하고 커맨드를 전송/처리하는 고수준 API도 있습니다.