DevBoi

[DDD] Axon-framework Query 사용 본문

Develop/[DDD]

[DDD] Axon-framework Query 사용

HiSmith 2023. 6. 14. 22:58
반응형

Axon framework 에서 command를 사용할때는 CommandBus, Event는 EventBus를 통해서 전달되었다

Query도 QueryBus를 통해서 해당 구현에 대한 Handler로 전달이 된다.

 

1. pointing query

해당 관련되서, 가장 간단한 구조이다.

각 핸들러를 미리 App에서 등록하고, 해당 요청이 오면 알맞은 Handler를 통해서 결과를 반환하는 것이다.

 

 

2. Routing 구조

멀티 모듈을 사용할때는 위와 같은 구조로 이루어 진다.

해당 관련되서, Axon Server에서 라우팅 테이블에 관련된 queryHandler를 등록해서, 사용자가 요청이 오면, 

알맞은 앱으로 전달 및 결과를 요청 앱에 등록한다.

 

우선 해당 간단한 쿼리 클래스를 만들자

public class OrderQuery { }

 

쿼리 핸들러가 선언된 구현체를 정의한다.

@Component
public class QueryHandlers {

  @Autowired
  OrderRepository orderRepository;

  @QueryHandler
  public List<Orders> handle(OrderQuery query){
    return orderRepository.findAll();
  }
}

 

사용하는 곳은 생각보다 심플하다.

@Autowired
  private QueryGateway queryGateway;
  
  
@GetMapping("/orders")
  public CompletableFuture<List<Orders>> getAllOrders(){
    return queryGateway.query(new OrderQuery(), ResponseTypes.multipleInstancesOf(Orders.class));
  }

 

단순히 해당 queryGateway를 주입받아서, 해당 핸들링 하는 쿼리 부분으로 넘기면, 관련되서 값을 받을 수 있다.

orderId관련되서는 간단하게 UUID를 통해서 값을 생성해서, 받았다.

 

구조적으로 제네릭 인터페이스로 묶던 뭘 하던 무튼 이건 나중의 구조적으로 개발할때 생각하면되고

어차피 설계도 어디까지가 공통화가 좋고, 아닌지에 대한건 사람마다 다르기때문에

 

 

반응형