Spring - 리본 클 라 이언 트 부하 균형
7572 단어 필기 하 다.spring-boot마이크로 서비스
넷 플 릭 스 리본 을 기반 으로 한 기본 HTTP 와 TCP 의 클 라 이언 트 부하 균형 작업독립 적 으로 배치 할 필요 가 없 이 도구 류 프레임 워 크 로 사용 합 니 다.
사용 방식
/* Eureka */
@EnableDiscoveryClient
@SpringBootApplication
public class SpringBootTestRibbonConsumerApplication {
/* , */
@Bean
@LoadBalanced
TestRestTemplate restTemplate(){
return new TestRestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(SpringBootTestRibbonConsumerApplication.class, args);
}
}
......
org.springframework.cloud
spring-cloud-starter-eureka
org.springframework.cloud
spring-cloud-starter-ribbon
.......
org.springframework.cloud
spring-cloud-dependencies
Brixton.SR5
pom
import
spring.application.name=ribbon-consumer
server.port=9000
eureka.client.service-url.defaultZone=http://localhost:1111/eureka/
# hello-service
# , 。
spring.cloud.loadablancer.retry.enabled = true
# Ribbon ,
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds = 10000
#
hello-service.ribbon.ConnectTimeout=250
#
hello-service.ribbon.ReadTimeout=1000
#
hello-service.ribbon.OkRoRetryOnAllOperations = true
#
hello-service.ribbon.MaxAutoRetriesNextServer = 2
#
hello-service.ribbon.MaxAutoRetries = 1
### sample-client in baidu
## Max number of retries
#ribbon.MaxAutoRetries=1
## Max number of next servers to retry (excluding the first server)
#ribbon.MaxAutoRetriesNextServer=1
## Whether all operations can be retried for this client
#ribbon.OkToRetryOnAllOperations=true
## Interval to refresh the server list from the source
#ribbon.ServerListRefreshInterval=2000
## Connect timeout used by Apache HttpClient
#ribbon.ConnectTimeout=3000
## Read timeout used by Apache HttpClient
#ribbon.ReadTimeout=3000
## Initial list of servers, can be changed via Archaius dynamic property at runtime
#ribbon.listOfServers=testserver1:80,testserver2 :80,testserver3:80
#ribbon.EnablePrimeConnections=true
@RestController
public class UsedHelloController {
/* */
@Autowired
RestTemplate restTemplate;
@RequestMapping(value = "ribbon-consumer",method = RequestMethod.GET)
public String helloConsumer(){
/* , */
return restTemplate.getForEntity("http://hello-service/hello",String.class).getBody();
}
// RestTemplate
@RequestMapping(value = "ribbon-consumer-get",method = RequestMethod.GET)
public String helloConsumerTestGet(){
/*getForEntity 1: 3
* String URL:
* Class responseType:
* Object... urlVariables: */
ResponseEntity responseEntity = restTemplate.getForEntity("http://hello-service/hello?name={1}",String.class," 1");
String body = responseEntity.getBody();
/*getForEntity 2: 3
* String URL:
* Class responseType:
* Map urlVariables : Map
*/
Map params = new HashMap<>();
params.put("name","name");
responseEntity = restTemplate.getForEntity("http://hello-service/hello?name={name}",String.class,params);
body = responseEntity.getBody();
/*getForEntity 3: 2
* URI: java.net
* Class responseType:
* : ╮(╯_╰)╭ */
/* 3 getForObject(。。。) 3 */
return body;
}
@RequestMapping(value = "ribbon-consumer-post",method = RequestMethod.POST)
public String helloConsumerTestPost(){
User user = new User("name");
// String user = new String();
ResponseEntity responseEntity = restTemplate.postForEntity("http://hello-service/hello",user,String.class);
/* , , */
String body = responseEntity.getBody();
return body;
/* get 3 ,
* postForObject postForLocation */
}
public class User {
private String name;
public User(String name){
this.name = name;
}
public User() {
}
}
@RequestMapping(value = "ribbon-consumer-put",method = RequestMethod.PUT)
public String helloConsumerTestPut(){
User user = new User("name");
Long id = 100L;
restTemplate.put("http://hello-service/hello/{1}",user,id);
/* 3 , put */
return null;
}
@RequestMapping(value = "ribbon-consumer-del",method = RequestMethod.DELETE)
public String helloConsumerTestDel(){
User user = new User("name");
Long id = 100L;
restTemplate.delete("http://hello-service/hello/{1}",id);
/* 3 , put */
return null;
}
}
간단 한 기본 값: 다른 관리 프레임 워 크 를 사용 하지 않 는 상황 에서 의 설정: * IclientConfig: Ribbon 의 클 라 이언 트 설정, 기본 값 은 com. netflix. client. config. Default Client ConfigImpl 구현 * IRule: Ribbon 의 복잡 한 균형 전략 을 사용 합 니 다. 기본 값 은 com. netflix. loadbancer. Zone Avoidance Rule 로 이 루어 집 니 다.정책 을 바 꾸 면 여러 지역 환경 에서 가장 좋 은 지역 의 인 스 턴 스 를 선택 하여 접근 할 수 있 습 니 다. *IPing: Ribbon 의 인 스 턴 스 검사 정책 은 기본적으로 com. netflix. loadbancer. NoOpPing 입 니 다. 실제로 검사 하지 않 고 true 로 돌아 갑 니 다. 기본 인 스 턴 스 는 모두 사용 할 수 있 습 니 다. *SercerList: 서비스 인 스 턴 스 목록 의 유지 체 제 는 기본적으로 com. netflix. loadbancer. Configuration BasedSercerList 입 니 다. *ServerLisetFilter: 서비스 인 스 턴 스 목록 필터 메커니즘, 기본 값 은 org. springframework. netflix. ribbon. Zone Preference ServerListFilter 입 니 다. 정책 은 요청 호출 자 와 같은 지역 에 있 는 서비스 인 스 턴 스 를 제한 적 으로 걸 러 냅 니 다. *ILoadBalancer: 부하 균형 기, 기본 사용: com. netflix. loadbancer. Zone AwareLoadBalancer 구현, 지역 감지 능력 을 갖 추고 있 습 니 다.
이러한 자동화 설정 내용 은 Rureka 등 서비스 관리 프레임 워 크 를 사용 하지 않 았 을 때 만 이 모양 입 니 다 (ノ 'Д)ノ
Camden 버 전 은 RibbonClient 설정 을 최적화 시 켰 습 니 다. 설정 파일 을 사용 하면 됩 니 다. 예 를 들 어:
hello-server.ribbon.NFLoadBalancerPingClassName = com.net.loadbalancer.PingUrl
## PingUrl IPing
## hello-server
## :org.springframework.cloud.netflix.ribbon.PropertiesFactory
Eureka 와 결합 하여 사용:
Eureka Ribbon :
ServerLiset :com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSSercerList
IPing:com.netflix.niws.loadbalancer.NIWSDiscoveryPing
ServerList :com.SpringFamework.cloud.netflix.ribbon.eureka.DomainExtractingServerLiset
Eureka 의 인 스 턴 스 데이터 원본 을 통 해 설정 할 수 있 습 니 다: 사용자 정의 영역 값 설정:
eureka.instance.metadataMap.zone = shanghai
Eureka 를 닫 고 Ribbon 의 서비스 인 스 턴 스 유 지 를 실현 합 니 다.
ribbon.eureka.enabled = false
저장 성ε=(´ο`*)))에이, 감기...
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Dubbo (2): zookeeper 등록 센터Zookeeper 는 Apacahe Hadoop 의 하위 프로젝트 로 트 리 형태의 디 렉 터 리 서비스 로 푸 시 변경 을 지원 하 며 Dubbo 서비스의 등록 센터 로 적합 하 며 산업 강도 가 높 아 생산 환경...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.