비동기 방식으로 통신 (Asynchronous commnunication over AMQP)
amqp라는 프로토콜을 이용해 순차적으로 동기하는 것이 아니라 연결되어 있는 모든 서비스를 변경된 사항을 전달할 수 있음
Rest Template
Java로 만들어진 웹어플리케이션 간에 HTTP 프로토콜을 이용해 또 다른 서비스(API)를 호출하는 방식
User Service -> Order Service
User-service에 Rest Template 등록
UserServiceImpl -> getUserByUserId 수정
@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);
// List<ResponseOrder> orders = new ArrayList<>();
// restTemplate 사용
String orderUrl = env.getProperty("order_service.url");
ResponseEntity<List<ResponseOrder>> orderListResponse =
restTemplate.exchange(
orderUrl,
HttpMethod.GET,
null,
new ParameterizedTypeReference<List<ResponseOrder>>() {
});
List<ResponseOrder> ordersList = orderListResponse.getBody();
userDto.setOrders(ordersList);
return userDto;
}
Order 정보 확인
주소가아닌 MicroService name 으로 호출 하기
yml 파일 설정 변경
Resttemplate
위 와같이 exchange 전까지 userId 값을 %s로 표시함
%s -> userId로 변환은 어디서 해주는가?
지정된 URI 템플릿에 대한 HTTP 메서드를 실행하고 RequestCallback으로 요청을 준비하며 ResponseExtractor로 응답을 읽습니다. URI 템플릿 변수는 지정된 URI 변수(있는 경우)를 사용하여 확장됩니다. 요청 콜백 또는 응답 추출기만 제공하되 둘 다 제공하지는 않으려면 다음을 고려하십시오.
expand(url, uriVariables)가 해주는듯 하다. 어디서 값을 가져와서 입력하는 진 모르겠다.