programing

@RibbonClient와 @LoadBalanced의 차이점

sourcetip 2023. 4. 2. 20:57
반응형

@RibbonClient와 @LoadBalanced의 차이점

알겠습니다.@LoadBalanced는 Rest 템플릿이 Ribbon을 사용한 클라이언트 측 로드밸런싱에 기반해야 함을 나타내고 Eureka 서버를 체크하여 호스트/포트에 대한 서비스 이름을 해결함을 나타냅니다.

의 용도는 무엇입니까?@RibbonClientEureka를 사용하지 않고 네이티브 리본 클라이언트 LB를 지원하며 Eureka Discover를 지원하는 경우DiscoveryEnabledNIWSServerList?

TL;DR:@LoadBalanced마커 주석 및@RibbonClient는 설정 목적으로 사용됩니다.


@LoadBalanced

주석을 달았다는 것을 나타내는 마커 주석으로 사용됩니다.RestTemplate를 사용해야 합니다.RibbonLoadBalancerClient서비스와의 상호 작용에 대해 설명합니다.

그 결과, 「논리 식별자」를 사용해, 에 건네주는 URL 에 사용할 수 있습니다.RestTemplate. 이러한 논리 식별자는 일반적으로 서비스 이름입니다.예를 들어 다음과 같습니다.

restTemplate.getForObject("http://some-service-name/user/{id}", String.class, 1);

어디에some-service-name는 논리 식별자입니다.

@RibbonClient

리본 클라이언트 설정에 사용됩니다.

@RibbonClient가 필요합니까?

아니요! 서비스 디스커버리를 사용하고 있으며 기본 리본 설정이 모두 만족스럽다면@RibbonClient주석입니다.

언제 사용하면 좋을까요?@RibbonClient?

적어도 두 가지 경우 다음을 사용해야 합니다.@RibbonClient

  1. 특정 리본 클라이언트의 리본 설정을 커스터마이즈해야 합니다.
  2. 서비스 디스커버리를 사용하지 않는 경우

리본 설정 사용자 지정:

의 정의@RibbonClient

@RibbonClient(name = "some-service", configuration = SomeServiceConfig.class)
  • name- Ribbon에서 호출하는 서비스와 동일한 이름으로 설정하지만 Ribbon이 해당 서비스와 상호 작용하는 방법에 대한 추가 커스터마이즈가 필요합니다.
  • configuration- 로 설정합니다.@Configuration모든 커스터마이즈가 다음과 같이 정의된 클래스@Beans클래스는 다음 사용자가 픽업하지 않도록 합니다.@ComponentScan그렇지 않으면 모든 리본 클라이언트의 기본값이 덮어씁니다.

Spring Cloud Netflix 설명서(링크)의 "RibbonClient 사용자 지정" 섹션을 참조하십시오.

서비스 디스커버리 없이 리본 사용

서비스 디스커버리를 사용하지 않는 경우name의 분야@RibbonClient주석은 의 설정에 프레픽스를 붙이기 위해 사용됩니다.application.properties또, 전달처의 URL 의 「논리 식별자」도 참조해 주세요.RestTemplate.

의 정의@RibbonClient

@RibbonClient(name = "myservice")

그럼 네 안에application.properties

myservice.ribbon.eureka.enabled=false
myservice.ribbon.listOfServers=http://localhost:5000, http://localhost:5001

RestTemplate로드 밸런싱 지원, 사용@LoadBalanced는 Spring Cloud에 로드밸런싱 지원을 이용하고 싶다고 말합니다(리본을 사용하는 경우 RestTemplate는 RibbionClient를 사용하여 서버 주소를 가져옵니다).
또한 LoadBalancer가 어떻게자동 설정은 이쪽에서 동작합니다.

@RibbonClients 를 사용하면 리본 클라이언트에 선언형 설정을 제공할 수 있습니다.

예.

@SpringBootApplication
@RestController
@RibbonClient(name = "app", configuration = RibbonConfig.class)
public class App {

  @LoadBalanced
  @Bean
  RestTemplate restTemplate(){
    return new RestTemplate();
  }
  //...
}

해서 ㄴ, ㄴ, ㄴ다를 만들어요.RibbonConfig.class이치노

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;

import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.IPing;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.PingUrl;
import com.netflix.loadbalancer.AvailabilityFilteringRule;

public class RibbonConfig {

  @Autowired
  IClientConfig ribbonClientConfig;

  @Bean
  public IPing ribbonPing (IClientConfig config) {
    return new PingUrl();//we override default Iping which is a NoOpPing
  }

  @Bean
  public IRule ribbonRule(IClientConfig config) {
    return new AvailabilityFilteringRule(); // we override the default ZoneAvoidanceRule
  }

}

언급URL : https://stackoverflow.com/questions/39587317/difference-between-ribbonclient-and-loadbalanced

반응형