溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Spring Cloud中怎么使用Ribbon

發(fā)布時(shí)間:2022-01-11 10:24:46 來(lái)源:億速云 閱讀:163 作者:iii 欄目:開(kāi)發(fā)技術(shù)

今天小編給大家分享一下Spring Cloud中怎么使用Ribbon的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。

1. 什么是 Ribbon?

Spring Cloud Ribbon 是一套實(shí)現(xiàn)客戶(hù)端負(fù)載均衡的工具。注意是客戶(hù)端,當(dāng)然也有服務(wù)端的負(fù)載均衡工具,我們后面再介紹??梢哉J(rèn)為 Ribbon 就是一個(gè)負(fù)載均衡器(Load Balancer,簡(jiǎn)稱(chēng)LB,即:low比~~)。負(fù)載均衡就是將用戶(hù)的請(qǐng)求平攤的分配到多個(gè)服務(wù)上,從而達(dá)到系統(tǒng)的高可用。

簡(jiǎn)單來(lái)說(shuō),Ribbon 的主要功能是提供客戶(hù)端的軟件負(fù)載均衡算法,將 Netflix 的中間層服務(wù)連接在一起。Ribbon 客戶(hù)端組件給我們提供了一套很完善的配置項(xiàng),比如可以配置連接超時(shí)、重試等等。

再說(shuō)的通俗一點(diǎn),就是可以在配置文件中列出 LB 后面所有的機(jī)器(即服務(wù)),Ribbon 會(huì)自動(dòng)根據(jù)某種規(guī)則(如輪詢(xún)、隨機(jī)等等)去連接這些機(jī)器(即服務(wù)),我們也可以自定義一些負(fù)載均衡算法。

再簡(jiǎn)單點(diǎn),Ribbon 就是一個(gè)類(lèi)庫(kù),集成在服務(wù)消費(fèi)方,消費(fèi)方從服務(wù)注冊(cè)中心獲知有哪些地址(即服務(wù))可用,然后消費(fèi)方通過(guò) Ribbon 從這些地址當(dāng)中選擇一個(gè)合適的服務(wù)器來(lái)消費(fèi)服務(wù)。

2. Ribbon 的使用

我們?cè)谇懊嫖恼轮?,將訂單服?wù)注冊(cè)到 Eureka,然后消費(fèi)方可以通過(guò) http 請(qǐng)求去獲取訂單的信息,但是這是最原始的 http 調(diào)用,沒(méi)有任何 Ribbon 的東西在里面,接下來(lái)我們要在消費(fèi)方植入 Ribbon。

2.1 導(dǎo)入 Ribbon 依賴(lài)

我們使用的Spring Cloud 版本是 Finchley,該版本需要導(dǎo)入的依賴(lài)如下:

<!--eureka Client-->
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--ribbon負(fù)載均衡依賴(lài)-->
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

可以看到,Eureka Client 的依賴(lài)也需要導(dǎo)入,因?yàn)榉?wù)注冊(cè)到了 Eureka,Ribbon 也需要和 Eureka 整合,所以在消費(fèi)方也導(dǎo)入了 Eureka 依賴(lài)。

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/

由前面的內(nèi)容(Spring Cloud:使用Eureka集群搭建高可用服務(wù)注冊(cè)中心)可知,我們搭建了一個(gè) Eureka 集群,那么就用這個(gè)集群,這個(gè)消費(fèi)方我們?cè)O(shè)置不注冊(cè)到該集群中。

2.3 向 http 中植入 Ribbon

這是什么意思呢?之前的 消費(fèi)方是使用 RestTemplate 來(lái)發(fā)送 http 請(qǐng)求,調(diào)用訂單服務(wù)的,但是沒(méi)有負(fù)載均衡,所以現(xiàn)在我們要讓這個(gè) http 調(diào)用自帶負(fù)載均衡。

即修改下 RestTemplate 配置:

/**
* 配置RestTemplate
* @author shengwu ni
*/
@Configuration
public class RestTemplateConfig {

   /**
    * '@LoadBalanced'注解表示使用Ribbon實(shí)現(xiàn)客戶(hù)端負(fù)載均衡
    * @return RestTemplate
    */
   @Bean
   @LoadBalanced
   public RestTemplate getRestTemplate() {
       return new RestTemplate();
   }
}

在方法上添加一個(gè) @LoadBalanced 注解即可開(kāi)啟 Ribbon 負(fù)載均衡。這樣就可以通過(guò)微服務(wù)的名字從 Eureka 中找到對(duì)應(yīng)的服務(wù)并訪問(wèn)了。

友情提示:別忘了在主啟動(dòng)類(lèi)上添加 @EnableEurekaClient,因?yàn)檫@個(gè)消費(fèi)方也是一個(gè) Eureka Client,剛剛我們已經(jīng)導(dǎo)入了 Eureka Client 的依賴(lài)了。

2.4 將ip改成服務(wù)名稱(chēng)

剛剛提到了,開(kāi)啟 Ribbon 負(fù)載均衡后,就可以通過(guò)微服務(wù)的名字從 Eureka 中找到對(duì)應(yīng)的服務(wù)。我們先來(lái)看下原來(lái)是怎么實(shí)現(xiàn)的。

/**
* 訂單消費(fèi)服務(wù)
* @author shengwu ni
*/
@RestController
@RequestMapping("/consumer/order")
public class OrderConsumerController {

   /**
    * 訂單服務(wù)提供者模塊的 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);
   }
}

可以看出,注釋掉的那部分,是原來(lái)的訪問(wèn)方式,訂單提供服務(wù)是8001端口,現(xiàn)在我們將ip+端口號(hào)這種訪問(wèn)方式,改成微服務(wù)名稱(chēng),這個(gè)名稱(chēng)就是 Eureka 管理界面顯示的注冊(cè)進(jìn)去的名稱(chēng),也即服務(wù)提供方的application.yml配置文件中配置的服務(wù)名稱(chēng):

spring:
 application:
   name: microservice-order # 對(duì)外暴露的服務(wù)名稱(chēng)

在前面文章中已經(jīng)說(shuō)了,不再贅述。

2.5 啟動(dòng)服務(wù),測(cè)試

還是和前面集群文章中提到的一樣,分別啟動(dòng) eureka7001、eureka7002、eureka7003以及訂單服務(wù)8001,可以看到訂單服務(wù)已經(jīng)注冊(cè)到 Eureka 集群。

然后啟動(dòng)消費(fèi)方服務(wù),然后在瀏覽器輸入 http://localhost:9001/consumer/order/get/1 即可查詢(xún)到對(duì)應(yīng)的訂單服務(wù):

{"id":1,"name":"跟武哥一起學(xué) Spring Boot","price":39.99,"dbSource":"microservice01"}

說(shuō)明,我們通過(guò)訂單的服務(wù)名稱(chēng)即可獲取訂單信息了。

以上就是“Spring Cloud中怎么使用Ribbon”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI