- 멀티 모듈 화 후 API 게이트를 통해 각 모듈을 연결할 때, 전환된 환경에서 다른 모듈에 있는 엔티티를 직접 참조할 수 없는경우, 어떤 방법을 사용하는게 좋은지?
방법은 크게 3가지가 있다.
- REST API 를 통한 정보조회
- RestTemplate
- WebClient
현재 MSA 환경에서 API 게이트웨이를 통해 다른 독립적인 (세분화된) 서비스들과 통신을 하는 것이기 때문에, REST API (http response)를 통해서 하는 것이 맞다.
MSA 환경에서 order-service 를 쓰는데, Product 정보가 필요한 경우를 예상해보자
1. WebClient.Builder 사용을 위한 의존성 추가
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-webflux'
}
2. Order-service 내에 Product DTO 생성
package com.example.buyme.order.dto;
import lombok.Data;
@Data
public class Product {
private Long productId;
private String productName;
private String productDescription;
private int productPrice;
private int productStock;
}
OrderService 내에 Product 정보를 API를 통해 가져오는 메소드
@Service
@RequiredArgsConstructor
public class OrderService {
private final OrderRepository orderRepository;
private final OrderItemRepository orderItemRepository;
private final WebClient.Builder webClientBuilder;
private Product getProductById(Long productId) {
return webClientBuilder.build()
.get()
.uri("http://gateway-service/products/" + productId)
.retrieve()
.bodyToMono(Product.class)
.block();
}
// 기타 메소드들...
}
Product 클래스를 order-service 내에서 정의된 DTO로 사용하여, product-service와의 통신을 할 수 있다.
'Project > Buy me If you can' 카테고리의 다른 글
Buyme Jmeter 락 X / 낙관적 락 / 분산락 / 테스트 결과 (0) | 2024.09.06 |
---|---|
Buyme TIL240828 jpa 쿼리오류 / docker-compose 환경설정 / 로컬의 properties , docker-compose 환경설정 관련 학습 (0) | 2024.08.30 |
Buyme TIL240826 멀티모듈 통신오류 (0) | 2024.08.29 |
Buyme TIL240816 모노리스 서비스를 MSA 로 구조화하기 - 멀티모듈화 / (트러블슈팅) 콘텐츠 루트 충돌 문제 (0) | 2024.08.17 |
Buyme TIL240813 기술적 의사결정 - 주문 상태 및 반품 상태의 세분화와 Enum 사용 (0) | 2024.08.14 |