作用
客戶端的負載均衡,與RestTemplate結合使用
1:pom
eureka的客戶端與nocos的客戶端pom依賴,都集成了ribbon,所以不再需要重復添加依賴
2:將RestTemplate注入到spring容i中
@Component @Configuration public class AppConfiguration { @LoadBalanced // 負載均衡 @Bean public RestTemplate restTemplate() { return new RestTemplate(); } }
@LoadBalanced // 負載均衡 該注解標記使用負載均衡,不標記則會導致:客戶端發現服務實例有多個,不知道調用哪一個的問題(默認使用輪詢算法)
3:RestTemplate的使用
@Autowired private RestTemplate restTemplate; private String url = "http://CLOUD-PAYMENT-SERVICE"; //正式環境從配置文件中讀取 @RequestMapping("/get/{id}") public BaseResult findById(@PathVariable("id") Integer id) { ResponseEntity<BaseResult> forEntity = restTemplate.getForEntity(url + "/payment/get/" + id, BaseResult.class); BaseResult body = forEntity.getBody(); return body; }
4:替換負載規則
4.1 負載均衡的策略
ribbon
負載均衡
步驟:
第一步:選擇eurekaServer,他優先選擇在同一區域內負載較少的server
第二步:根據用戶指定的策略,從server取到的服務注冊列表中選擇一個地址
策略Irule:
RoundRobinRule
輪詢
WeighedResponseTimeRule
響應速度快的實例選擇權重大
RandomRule
隨機
RetryRule
先按照RoundRobinRule策略獲取,失敗后會重試(重試試還是找本次獲取的實例,還是找另一個??)
BestAvailableRule
過濾掉多次訪問而處於短路器跳閘狀態的服務,然后選擇一個並發小的
ZoneAvoidanceRule
默認規則,符合判斷server所在域的性能和server的可用性選擇服務器
根據響應時間加權
替換負載規則
備注:自定義rebion不應該放到@ComponentScan下,否則會被所有的客戶端共享,springBootApplication注解,默認帶上@ComponentScan下
備注:eureka-client依賴,默認集成了ribbon
4.2 自定義負載均衡
@Configuration public class CloudRondowRule { @Bean public IRule iRule() { return new RandomRule(); //隨機的規則 } }
main方法在springcloud包下,CloudRondowRule規則的定義在myRule包下,這樣就不會掃描到了CloudRondowRule
5:標記客戶端使用定義的負載均衡的切換規則
@EnableEurekaClient @SpringBootApplication @RibbonClient(name = "CLOUD-PAYMENT-SERVICE", configuration = CloudRondowRule.class) public class OrderMain80 { public static void main(String[] args) { SpringApplication.run(OrderMain80.class); } }
6:調用客戶端的接口測試