본문 바로가기
MSA

RestTemplate

by 혀눅짱 2023. 9. 4.

RestTemplate을 활용하여  별도로 구성된 User-serivce 와 Order-serivce의 간에 통신을 구현해보았다.

 

먼저 user-service에 RestTemplate을 @Bean으로 등록한다. 또한 유레카 서버에 등록된 어플리케이션네임으로 접근하여 통신할수 있도록 로드밸런스 어노테이션을 추가한다.

 

@SpringBootApplication
@EnableDiscoveryClient
public class UserServiceApplication {

   public static void main(String[] args) {
      SpringApplication.run(UserServiceApplication.class, args);
   }

   @Bean
   public BCryptPasswordEncoder passwordEncoder(){
      return new BCryptPasswordEncoder();
   }

   @Bean
   @LoadBalanced
   public RestTemplate getRestTemplate(){
      return new RestTemplate();
   }
}

 

세팅이 완료 되면 유저서비스에서 유저정보를 가져오는 부분에 유저가 주문한 주문정보를 오더서비스에서 받아올수 있도록 로직을 추가한다.

 

@Override
public UserDto getUserByUserId(String userId) {
    UserEntity userEntity = userRepository.findByUserId(userId);

    if(userEntity == null){
        throw new UsernameNotFoundException("User not found");
    }

    UserDto userDto = new ModelMapper().map(userEntity, UserDto.class);

    String orderUrl = String.format(env.getProperty("order-service.url"),userId);
    ResponseEntity<List<ResponseOrder>> orderListResponse = restTemplate.exchange(orderUrl, HttpMethod.GET, null, new ParameterizedTypeReference<List<ResponseOrder>>() {
    });

    List<ResponseOrder> orders = orderListResponse.getBody();
    userDto.setOrders(orders);


    return userDto;
}

order-url의 경우 컨피그 서비스에서

order_service:
  url: http://order-service/order-service/%s/orders

로 세팅하였다.

resttemplate은 첫번째인자 url 두번째인자 메소드전송방식 세번째인자 파라미터 네번째인자 리턴받을 타입을 지정하면된다.

 

해당 로직을 실행하면 유저서비스에서 userid를 url에 포함시켜 요청하게되고 오더 서비스에서 해당 userid로 주문내역을 조회해 리턴한다.

 그후 유저서비스에서 응답으로 유저정보와 오더서비스에서 넘겨받은 주문정보를 같이리턴하게 된

다.

'MSA' 카테고리의 다른 글

CircuitBreaker,Resilience4J 구현  (0) 2023.09.12
FeignClient  (0) 2023.09.04
RabbitMQ  (0) 2023.09.04
Config service  (0) 2023.09.04
Spring Cloud GateWay  (0) 2023.09.04