您好,登錄后才能下訂單哦!
今天小編給大家分享一下Spring Cloud中怎么使用Ribbon的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
1. 什么是 Ribbon?
Spring Cloud Ribbon 是一套實現客戶端負載均衡的工具。注意是客戶端,當然也有服務端的負載均衡工具,我們后面再介紹。可以認為 Ribbon 就是一個負載均衡器(Load Balancer,簡稱LB,即:low比~~)。負載均衡就是將用戶的請求平攤的分配到多個服務上,從而達到系統的高可用。
簡單來說,Ribbon 的主要功能是提供客戶端的軟件負載均衡算法,將 Netflix 的中間層服務連接在一起。Ribbon 客戶端組件給我們提供了一套很完善的配置項,比如可以配置連接超時、重試等等。
再說的通俗一點,就是可以在配置文件中列出 LB 后面所有的機器(即服務),Ribbon 會自動根據某種規則(如輪詢、隨機等等)去連接這些機器(即服務),我們也可以自定義一些負載均衡算法。
再簡單點,Ribbon 就是一個類庫,集成在服務消費方,消費方從服務注冊中心獲知有哪些地址(即服務)可用,然后消費方通過 Ribbon 從這些地址當中選擇一個合適的服務器來消費服務。
2. Ribbon 的使用
我們在前面文章中,將訂單服務注冊到 Eureka,然后消費方可以通過 http 請求去獲取訂單的信息,但是這是最原始的 http 調用,沒有任何 Ribbon 的東西在里面,接下來我們要在消費方植入 Ribbon。
2.1 導入 Ribbon 依賴
我們使用的Spring Cloud 版本是 Finchley,該版本需要導入的依賴如下:
<!--eureka Client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--ribbon負載均衡依賴-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
可以看到,Eureka Client 的依賴也需要導入,因為服務注冊到了 Eureka,Ribbon 也需要和 Eureka 整合,所以在消費方也導入了 Eureka 依賴。
2.2 配置 application.yml
server:
port: 9001
eureka:
client:
register-with-eureka: false
service-url:
defaultZone: http://eureka01:7001/eureka/,http://eureka02:7002/eureka/,http://eureka03:7003/eureka/
由前面的內容(Spring Cloud:使用Eureka集群搭建高可用服務注冊中心)可知,我們搭建了一個 Eureka 集群,那么就用這個集群,這個消費方我們設置不注冊到該集群中。
2.3 向 http 中植入 Ribbon
這是什么意思呢?之前的 消費方是使用 RestTemplate 來發送 http 請求,調用訂單服務的,但是沒有負載均衡,所以現在我們要讓這個 http 調用自帶負載均衡。
即修改下 RestTemplate 配置:
/**
* 配置RestTemplate
* @author shengwu ni
*/
@Configuration
public class RestTemplateConfig {
/**
* '@LoadBalanced'注解表示使用Ribbon實現客戶端負載均衡
* @return RestTemplate
*/
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
在方法上添加一個 @LoadBalanced 注解即可開啟 Ribbon 負載均衡。這樣就可以通過微服務的名字從 Eureka 中找到對應的服務并訪問了。
友情提示:別忘了在主啟動類上添加 @EnableEurekaClient,因為這個消費方也是一個 Eureka Client,剛剛我們已經導入了 Eureka Client 的依賴了。
2.4 將ip改成服務名稱
剛剛提到了,開啟 Ribbon 負載均衡后,就可以通過微服務的名字從 Eureka 中找到對應的服務。我們先來看下原來是怎么實現的。
/**
* 訂單消費服務
* @author shengwu ni
*/
@RestController
@RequestMapping("/consumer/order")
public class OrderConsumerController {
/**
* 訂單服務提供者模塊的 url 前綴
*/
// private static final String ORDER_PROVIDER_URL_PREFIX = "http://localhost:8001";
private static final String ORDER_PROVIDER_URL_PREFIX = "http://MICROSERVICE-ORDER";
@Resource
private RestTemplate restTemplate;
@GetMapping("/get/{id}")
public TOrder getOrder(@PathVariable Long id) {
return restTemplate.getForObject(ORDER_PROVIDER_URL_PREFIX + "/provider/order/get/" + id, TOrder.class);
}
}
可以看出,注釋掉的那部分,是原來的訪問方式,訂單提供服務是8001端口,現在我們將ip+端口號這種訪問方式,改成微服務名稱,這個名稱就是 Eureka 管理界面顯示的注冊進去的名稱,也即服務提供方的application.yml配置文件中配置的服務名稱:
spring:
application:
name: microservice-order # 對外暴露的服務名稱
在前面文章中已經說了,不再贅述。
2.5 啟動服務,測試
還是和前面集群文章中提到的一樣,分別啟動 eureka7001、eureka7002、eureka7003以及訂單服務8001,可以看到訂單服務已經注冊到 Eureka 集群。
然后啟動消費方服務,然后在瀏覽器輸入 http://localhost:9001/consumer/order/get/1 即可查詢到對應的訂單服務:
{"id":1,"name":"跟武哥一起學 Spring Boot","price":39.99,"dbSource":"microservice01"}
說明,我們通過訂單的服務名稱即可獲取訂單信息了。
以上就是“Spring Cloud中怎么使用Ribbon”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。