使用配置檔案自定義Ribbon配置
阿新 • • 發佈:2018-12-13
1、application.yml——Ribbon配置檔案
debug: false
spring:
application:
name: mcc-ribbon-properties
cloud:
consul:
discovery:
instanceId: ${spring.application.name}:${server.port}
host: localhost
port: 8500
config:
enabled: true #false禁用Consul配置,預設true
format: YAML # 表示consul上面檔案的格式 有四種 YAML PROPERTIES KEY -VALUE FILES
#data-key: configuration #表示consul上面的KEY值(或者說檔案的名字) 預設是data
data-key: data #表示consul上面的KEY值(或者說檔案的名字) 預設是data
#prefix設定配置值的基本資料夾
#defaultContext設定所有應用程式使用的資料夾名稱
#profileSeparator設定用於使用配置檔案在屬性源中分隔配置檔名稱的分隔符的值
server:
port: 8804
#預載入配置,預設為懶載入
ribbon:
eager-load:
enabled: true
clients: mima-cloud-producer,mima-cloud-producer2
#這裡使用服務提供者的instanceName
mima-cloud-producer:
ribbon:
# 代表Ribbon使用的負載均衡策略
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
# 每臺伺服器最多重試次數,但是首次呼叫不包括在內, Max number of retries on the same server (excluding the first try)
MaxAutoRetries: 1
# 最多重試多少臺伺服器,Max number of next servers to retry (excluding the first server)
MaxAutoRetriesNextServer: 1
# 無論是請求超時或者socket read timeout都進行重試,Whether all operations can be retried for this client
OkToRetryOnAllOperations: true
# Interval to refresh the server list from the source
ServerListRefreshInterval: 2000
# Connect timeout used by Apache HttpClient
ConnectTimeout: 3000
# Read timeout used by Apache HttpClient
ReadTimeout: 3000
mima-cloud-producer2:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.ZoneAvoidanceRule
2、RibbonConsumerApplication——Ribbon啟動類
package com.mimaxueyuan.consumer.robbin;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableDiscoveryClient
public class RibbonConsumerApplication {
@Bean
@LoadBalanced // 需要使用負載均衡,必須與Bean一同使用
public RestTemplate balanceRestTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(RibbonConsumerApplication.class, args);
}
}
3、RibbonController——Ribbon測試類
package com.mimaxueyuan.consumer.robbin.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class RibbonController {
@Autowired
private RestTemplate balanceRestTemplate;
// 以下注入負載均衡客戶端LoadBalancerClient是一個介面,下面只有一個RibbonLoadBalancerClient實現類
@Autowired
private LoadBalancerClient loadBalancerClient;
@Autowired
private RibbonLoadBalancerClient ribbonLoadBalancerClient;
// 基於properties的ribbon使用展示
@GetMapping("/ribbon/get1")
public String eureka() {
ServiceInstance instance = loadBalancerClient.choose("mima-cloud-producer");
System.out.println("host:" + instance.getHost() + ",port:" + instance.getPort() + ",serviceId=" + instance.getServiceId() + ",uri=" + instance.getUri());
return "/ribbon/get1's demo, please to see console output";
}
// 基於properties的ribbon使用展示
@GetMapping("/ribbon/get2")
public String get2() {
ServiceInstance instance = loadBalancerClient.choose("mima-cloud-producer2");
System.out.println("host:" + instance.getHost() + ",port:" + instance.getPort() + ",serviceId=" + instance.getServiceId() + ",uri=" + instance.getUri());
return "/ribbon/get2's demo, please to see console output";
}
}