한이음 프로젝트

[한이음]MSA프로젝트(3)- 서비스 호출 구현

딤섬뮨 2022. 8. 3. 16:46
728x90

 

이 게시물은 5. [MSA 구현 퀵스타트] 서비스 디스커버리 초간단 구현 (tistory.com)의 글을 참조하며 본인의 코드에 적용하며 작성하는 글입니다.

본격적인 환경 설정을 끝냈으면 유레카 서비스를 하나 만들자

제공되는DiscoveryClient 객체를 이용하여 유레카 서버에 등록된 서비스 목록을 가져오는 API를 구현해본다.

제공하려는 서비스(bbl-career)의 하위 패키지로 Erueka 전용 패키지를 생성해주고 안에 Service와 Controller를 하나 만들어준다.

파일 구조는 다음과 같다.

 

1. 유레카 서버에 등록된 서비스 목록을 가져오는 API (/service)

 

1. 코드 작성

 

DiscoveryClient는 유레카 클라이언트에서 제공하는 객체로서 서비스들의 정보를 찾아서 제공해주는 객체이다.

위 소스는 유레카 서버에 등록된 모든 서비스들을 반복문을 돌면서 List에 저장 후 반환해 주는 소스다.

소스는 출처의 코드를 사용했다.

 

  • Service 코드
@Slf4j
@Service
public class EurekaService {

  @Autowired
  private DiscoveryClient discoveryClient;

  public List getServices(){
    List<String> services = new ArrayList<String>();

    /** 람다스트림 표현 */
    discoveryClient.getServices().forEach(serviceName -> {
      discoveryClient.getInstances(serviceName).forEach(instance->{
        services.add( String.format("%s:%s",serviceName,instance.getUri()));
      });
    });
    return services;
  }

}
  • controller는 다음과 같다

 

public class EruekaController {

  @Autowired
  EurekaService eurekaService;

  @GetMapping(value = "/services")
  public List<String> services() {
    return eurekaService.getServices();
  }


}

 

2. 실행

 

이제 Eureka application과 bbl-career application을 둘 다 가동해준다.

유레카 서버 가동하고 서비스 가동하기.

 

 

그러면 전과는 다르게 Instances currently registered with Eureka 부분에 내 application bbl-career가 등록됨을 볼 수 있다.

실제로 다음 주소로 get을 요청하면 

application에 bbl-career가 잘 반환된다.

 

 

 

 

2. 서비스 2 - 고객의 {memberIdentity}를 받으면 최종 인사 내역을 반환하는 API

내가 구현한 인사 내역 기능 중에는 고객의 {memberIdentity}를 받으면 해당 인사 내역을 반환하는 API가 있다.

잘 작동함을 확인할 수 있다.

port번호 조심하기../..ㅎ

 

 

참고로 출처 블로그에서 알려준 내용으로는 각 서비스들이 유레카 서버로 등록이 되었어도 바로 정보를 받아볼 수는 없다고 한다. (예제를 실행하면 대략 30초 이후에  값을 얻을 수 있음.

그 이유는 유레카 클라이언트는 기본적으로 30초 주기로 유레카 서버로부터 정보를 가져오도록 구성되어 있습니다. 하여 빨리 정보를 확인하고 싶으신 분들은 이 주기를 줄여야 한다

 

각 클라인트의 application.yml에 아래 설정을 추가해보자.

eureka:
  client:
    registryFetchIntervalSeconds: 5 # eureka에게 서비스 정보를 가져오는 주기
    disable-delta: true # eureka에게 서비스 정보를 가져올때 변경된 내용만 가져온다. (false로 하면 전체를 가져오기에 대역폭 낭비이다.)
 

 

registryFetchIntervalSeconds를 통해 30초를 5초로 줄였습니다. disable-delta는 다른 서비스 정보 중에 변경된 부분만 가져옴으로써 자원 낭비를 줄일 수 있다.

  • 실제 운영 모드에서는 5초를 짧게 설정하여 자원을 낭비하는 것을 권장하지 않습니다. 이중화 구성이 되어있고 재기 동시에도 인스턴스 1대씩 간격을 두고 처리하여야 하기에 너무 짧은 간격으로 가져올 필요가 없습니다.

 

이렇게 서비스를 유레카 서버에 등록하는 것까지 완료하였다. 출처 블로그분이 너무 자세하게 써주셔서 잘 따라갈 수 있었다.

728x90