SpringCloud(二)之feign和ribbon
阿新 • • 發佈:2019-01-11
SpringCloud(二)之feign和ribbon
1.ribbon
ribbon的作用,如果像上篇一樣我們呼叫的話寫死固定的節點,這樣我們的服務還是一個單點呼叫。ribbon就是實現服務多個提供者之間的負載均衡的一個外掛。
整合ribbon
a.匯入ribbon的依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId> spring-cloud-starter-openfeign</artifactId>
</dependency>
b.啟動類添加註解**@RibbonClient(name = “PROVIDER-EUREKA”)**:
@SpringBootApplication
@EnableEurekaClient
@RibbonClient(name = "PROVIDER-EUREKA")
public class RibbonConsumerAppklication {
public static void main(String[] args) {
SpringApplication.run(RibbonConsumerAppklication.class);
}
@Bean
@LoadBalanced //預設輪詢
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
註解LoadBalanced就是開啟負載均衡策略,預設是輪詢策略。
c.controller層程式碼
@Autowired
private RestTemplate restTemplate;
@Autowired
private LoadBalancerClient loadBalancerClient;
@GetMapping("/ribbon")
public String hiRibbion(){
String result = restTemplate.getForObject("http://PROVIDER-EUREKA/hi/ribbon", String.class);
ServiceInstance choose = loadBalancerClient.choose("PROVIDER-EUREKA");
System.out.println(choose.getHost()+choose.getPort());
return result+choose.getUri();
}
直接使用RestTemplate通過服務名呼叫服務,LoadBalancerClient物件可以獲取服務提供者的詳細資訊。我們可以列印控制太看他的負載均衡策略是什麼樣子的。
d.自定義ribbon的負載均衡測策略
最簡單的就是直接在yml配置檔案中配置即可:
PROVIDER-EUREKA: #要設定 ribbon 的服務的名字
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #負載均衡的規則 隨機
其他的策略配置和其他的方式自定義負載策略的方式可以參考springcloud的官方文件。
2.feign
feign的內部其實就是封裝了ribbon和RestTemplate的操作我們通過一個介面和註解就可以操作了。只是進行了分封裝,簡化了操作。
a.第一步當然還是匯入feign的依賴。(feign的依賴中已經包含了ribbon的了)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
b.第二步實現一個介面,進行feign的配置
@FeignClient("PROVIDER-EUREKA")//內部其實就是通過ribbon和restTemplate實現的幫我們省略了實現的過程
public interface ProviderService {
@RequestMapping("/hi/feign")
String hiFiegn();
}
c.最後在controller中注入介面,呼叫方法即可。
@Autowired
private ProviderService providerService;
@GetMapping("/feign")
public String hiFeign(){
return providerService.hiFiegn();
}
ribbon就是為了實現消費者對服務提供者負載均衡呼叫的外掛,防止服務中出現單點故障。feign就是對我們用ribbon實現服務提供者負載均衡過程的一個封裝,用起來更加簡便,直接使用即可。å