一、Ribbon
概述
SpringCloudRibbon是基于Netflix Ribbon實作的一套客戶端負載均衡工具,提供客戶端的軟體負載均衡演算法和服務呼叫,
那么什么是客戶端負載均衡?大家有聽說過nginx吧,它是服務端負載均衡,它的意思是當客戶端(比如用戶)向你的服務器發起請求,會由nginx進行負載均衡選擇轉發,這就是服務端負載均衡,也就是客戶端無需任何選擇,只用發給nginx就行了,
而Ribbon是被集成在客戶端上,比如你的一個微服務A,當它需要請求另一個微服務B時,那么你的服務A就是客戶端,它會從注冊中心(Eureka,Nacos等)獲取微服務B的集群,然后通過負載均衡選擇合適的一個進行轉發,在這個程序中,微服務B也就是服務端是無需任何選擇,全由客戶端進行選擇,所以Ribbon被稱為客戶端負載均衡,
使用
使用起來非常簡單,先添加依賴,如果你已經添加了Eureka或者Nacos的依賴,那么無需再添加依賴,
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
然后在RestTemplate的配置類的@bean方法上加上@LoadBalanced,ribbon一般是搭配RestTemplate物件使用的,RestTemplate對httpclient進行了封裝,可以進行遠程的http請求,RestTemplate是在web包下的,
//RestTemplate 配置類
public class RestTemplateConfig{
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
// 呼叫類
public class RestTemplateTest{
@Autowired
private RestTemplate restTemplate;
@getMapping("/test")
public void test1(){
// 沒使用ribbon前,url需要使用ip地址+埠號
restTemplate.getForEntity("http://ip:port/XXX",回傳物件.Class)
// 使用ribbon后
restTemplate.getForEntity("http://服務名/XXX",回傳物件.Class)
}
}
二、Feign
概述
前面在使用Ribbon+RestTemplate 時, 利用 @LoadBalanced 注解 將RestTemplate 類加強,并實作客戶端對服務端的呼叫并負載均衡,但是我們發現,在呼叫服務端時 必須手動指定其服務名,而客戶端往往不止呼叫一個服務端,這使的Ribbon的使用變得復雜
Feign 集成了Ribbon,它是一個宣告式的客戶端工具,可以通過定義一個介面,并通過注解的方式生成代理類,封裝了Ribbon的呼叫,它有一套自己的注解
OpenFeign是springcloud在Feign的基礎上支持了SpringMVC的注解,如@RequestMapping等等,OpenFeign的@FeignClient可以決議SpringMVC的@RequestMapping注解下的介面,并通過動態代理的方式產生實作類,實作類中做負載均衡并呼叫其他服務,
使用
使用起來非常簡單,先加依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
創建一個介面,在介面加上@FeignClient("被呼叫的服務名")注解
@Component
@FeignClient("被呼叫的服務名")
public interface FeignService {
在該介面中申明的方法要和被呼叫方提供的方法介面相同,
所以一般用這個介面直接繼承被呼叫方的介面即可,
}
// 在需要使用的類中使用自動注入即可使用
@Autowire
FeignService feignService;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/290833.html
標籤:其他
上一篇:ajax 跨域處理
下一篇:網路參考模型
