自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解SpringCloud客戶端負(fù)載均衡Ribbo/Feign

開發(fā) 前端
Ribbon是Netflix公司發(fā)布的開源項(xiàng)目(組件、框架、jar包),主要功能是提供客戶端的軟件負(fù)載均衡算法,它會從eureka中獲取一個可用的服務(wù)端清單,通過心跳檢測來剔除故障的服務(wù)端節(jié)點(diǎn)以保證清單中都是可以正常訪問的服務(wù)端節(jié)點(diǎn)。

[[396983]]

Spring Cloud Ribbon

Ribbon是什么?

  • (Spring Cloud Netflix) -->大量使用了Netflix公司的開源項(xiàng)目
  • (Spring Cloud Alibaba)-->大量使用了Alibaba公司的開源項(xiàng)目

Spring Cloud Ribbon是基于Netflix Ribbon實(shí)現(xiàn)的一套客戶端負(fù)載均衡器;

我們通常說的負(fù)載均衡是指將一個請求均勻地分?jǐn)偟讲煌墓?jié)點(diǎn)單元上執(zhí)行,負(fù)載均衡分為硬件負(fù)載均衡和軟件負(fù)載均衡:

  • 硬件負(fù)載均衡:比如 F5、深信服、Array 等;
  • 軟件負(fù)載均衡:比如 Nginx、LVS、HAProxy 等;(是一個服務(wù)器實(shí)現(xiàn)的)

Ribbon是Netflix公司發(fā)布的開源項(xiàng)目(組件、框架、jar包),主要功能是提供客戶端的軟件負(fù)載均衡算法,它會從eureka中獲取一個可用的服務(wù)端清單,通過心跳檢測來剔除故障的服務(wù)端節(jié)點(diǎn)以保證清單中都是可以正常訪問的服務(wù)端節(jié)點(diǎn)。

當(dāng)客戶端發(fā)送請求,則ribbon負(fù)載均衡器按某種算法(比如輪詢、權(quán)重、 最小連接數(shù)等)從維護(hù)的可用服務(wù)端清單中取出一臺服務(wù)端的地址,然后進(jìn)行請求;

Ribbon非常簡單,可以說就是一個jar包,這個jar包實(shí)現(xiàn)了負(fù)載均衡算法,Spring Cloud 對 Ribbon 做了二次封裝,可以讓我們使用 RestTemplate 的服務(wù)請求,自動轉(zhuǎn)換成客戶端負(fù)載均衡的服務(wù)調(diào)用。

Ribbon 支持多種負(fù)載均衡算法,還支持自定義的負(fù)載均衡算法。

客戶端負(fù)載均衡 vs 服務(wù)端負(fù)載均衡

采用Ribbon實(shí)現(xiàn)服務(wù)調(diào)用

1、首先加入ribbon的依賴,但是eureka已經(jīng)依賴了ribbon,所以這里不需要再引用ribbon的依賴;

2、要使用ribbon,只需要一個注解:

  1. @Bean 
  2. @LoadBalanced 
  3. public RestTemplate restTemplate(){ 
  4.     RestTemplate restTemplate = new RestTemplate(); 
  5.     return restTemplate; 

 在RestTemplate上面加入@LoadBalanced注解,這樣就可以實(shí)現(xiàn)RestTemplate 在調(diào)用時自動負(fù)載均衡;

我們這里現(xiàn)在啟動了eureka集群(3個eureka) 和服務(wù)提供者集群(2個service-goods) 和一個服務(wù)調(diào)用者(service-portal)

#告訴服務(wù)端,服務(wù)實(shí)例的唯一ID

eureka.instance.instance-id=34-sprinGCloud-service-portal

Ribbon 負(fù)載均衡策略

Ribbon 的負(fù)載均衡策略是由 IRule 接口定義, 該接口由如下實(shí)現(xiàn):

在jar包:com.netflix.ribbon#ribbon-loadbalancer中;

要使用ribbon實(shí)現(xiàn)負(fù)載均衡,在Spring 的配置類里面把對應(yīng)的負(fù)載均衡接口實(shí)現(xiàn)類作為一個Bean配置一下就行了;

負(fù)載均衡的入口:ILoadBalancer接口

如果要切換負(fù)載均衡策略:

  1. @Bean 
  2. public IRule iRule(){ 
  3.     return new RoundRobinRule(); 

 

如果我們沒有指定負(fù)載均衡策略,ribbon默認(rèn)的負(fù)載均衡是ZoneAvoidanceRule;(新版本,G版本)

Spring Cloud Feign

Feign是什么?

Feign 是 Netflix 公司開發(fā)的一個聲明式的 REST 調(diào)用客戶端; (調(diào)用遠(yuǎn)程的restful風(fēng)格的http接口的一個組件)

調(diào)用組件其實(shí)很多,比如:

1、Httpclient(apache)

2、Httpurlconnection (jdk)

3、restTemplate(spring)

4、OkHttp(android)

5、Feign (Netflix) --> 實(shí)現(xiàn)非常優(yōu)雅

Spring Cloud Feign 對 Ribbon 負(fù)載均衡進(jìn)行了簡化,在其基礎(chǔ)上進(jìn)行了進(jìn)一步的封裝,在配置上大大簡化了開發(fā)工作,它是一種聲明式的調(diào)用方式,它的使用方法是定義一個接口,然后在接口上添加注解,使其支持了Spring MVC標(biāo)準(zhǔn)注解和HttpMessageConverters,F(xiàn)eign可以與Eureka和Ribbon組合使用以支持負(fù)載均衡。

Feign能干什么?

Feign旨在簡化微服務(wù)消費(fèi)方(調(diào)用者,客戶端)代碼的開發(fā),前面在使用Ribbon+RestTemplate進(jìn)行服務(wù)調(diào)用時,利用RestTemplate對http請求的封裝處理,形成了一套模版化的調(diào)用方式,但是在實(shí)際開發(fā)中,由于服務(wù)提供者提供的接口非常多,一個接口也可能會被多處調(diào)用,F(xiàn)eign在Ribbon+RestTemplate的基礎(chǔ)上做了進(jìn)一步封裝,在Feign封裝之后,我們只需創(chuàng)建一個接口并使用注解的方式來配置,即可完成對服務(wù)提供方的接口綁定,簡化了使用Ribbon + RestTemplate的調(diào)用,自動封裝服務(wù)調(diào)用客戶端,減少代碼開發(fā)量;

使用Feign實(shí)現(xiàn)消費(fèi)者

使用 Feign 實(shí)現(xiàn)消費(fèi)者,我們通過下面步驟進(jìn)行:

第一步:創(chuàng)建普通 Spring Boot 工程

把接口放在通用的接口層、常量類、model的項(xiàng)目中

第二步:添加依賴

要 添 加 的 依 賴 主 要 是

spring-cloud-starter-netflix-eureka-client 和 spring-cloud-starter-feign,如下:

  1. <!-- spring-cloud-starter-openfeign --> 
  2. <dependency> 
  3.     <groupId>org.springframework.cloud</groupId> 
  4.     <artifactId>spring-cloud-starter-openfeign</artifactId> 
  5. </dependency> 

 第三步:聲明服務(wù)

定義一個 GoodsRemoteClient 接口,通過@FeignClient 注解來指定服務(wù)名稱,進(jìn)而綁定服務(wù),然后再通過 SpringMVC 中提供的注解來綁定服務(wù)提供者提供的接口, 如下:

  1. @FeignClient("34-SPRINGCLOUD-SERVICE-GOODS"
  2. public interface GoodsService { 
  3. @RequestMapping("/service/goods"
  4. public String goods(); 

 這相當(dāng)于綁定了一個名叫34-SPRINGCLOUD-SERVICE-GOODS (這里34-SPRINGCLOUD-SERVICE-GOODS大小寫34-sprinGCloud-service-goods都可以 ) 的服務(wù)提供者提供的/service/goods 接口;

第四步:添加注解

在項(xiàng)目入口類上添加@EnableFeignClients 注解表示開啟 Spring Cloud Feign的支持功能;

第五步:使用 Controller 中調(diào)用服務(wù)

接著來創(chuàng)建一個 Controller 來調(diào)用上面的服務(wù),如下:

  1. public class GoodsController { 
  2.     @Autowired 
  3.     private GoodsService goodsService; 
  4.     /** 
  5.      * 使用feign進(jìn)行調(diào)用 
  6.      * 
  7.      * @return 
  8.      */ 
  9.     @RequestMapping("/cloud/goodsFeign"
  10.     public ResultObject goodsFeign() { 
  11.         //調(diào)用遠(yuǎn)程的一個controller, restful的調(diào)用 
  12.         return goodsService.goods(); 
  13.     } 

 第六步:屬性配置

在 application.properties 中指定服務(wù)注冊中心、端口號等信息,如下:

server.port=8090

#打開所有的web訪問端點(diǎn)

management.endpoints.web.exposure.include=*

#此實(shí)例注冊到eureka服務(wù)端的name

spring.application.name=34-sprinGCloud-service-feign

#不注冊自己,我是一個消費(fèi)者,別人如果不調(diào)用我的話,我就不用注冊

eureka.client.register-with-eureka=false

#每間隔2s,向服務(wù)端發(fā)送一次心跳,證明自己依然"存活"

eureka.instance.lease-renewal-interval-in-seconds=2

#告訴服務(wù)端,如果我10s之內(nèi)沒有給你發(fā)心跳,就代表我故障了,將我踢出掉

eureka.instance.lease-expiration-duration-in-seconds=10

#告訴服務(wù)端,服務(wù)實(shí)例以IP作為鏈接,而不是取機(jī)器名

eureka.instance.prefer-ip-address=true

#告訴服務(wù)端,服務(wù)實(shí)例的唯一ID

eureka.instance.instance-id=34-sprinGCloud-service-feign

#eureka注冊中心的連接地址

#eureka.client.service-url.defaultZone=http://eureka8761:8761/eureka

#eureka.client.service-url.defaultZone=http://eureka8761:8761/eureka,http://eureka8762:8762/eureka,http://eureka8763:8763/eureka

eureka.client.service-url.defaultZone=http://192.168.10.128:8761/eureka,http://192.168.10.128:8762/eureka,http://192.168.10.128:8763/eureka

第七步:測試

依次啟動注冊中心、服務(wù)提供者和 feign 實(shí)現(xiàn)服務(wù)消費(fèi)者,然后訪問如下地址:

http://localhost:8090/cloud/goodsFeign

使用Feign實(shí)現(xiàn)消費(fèi)者的測試

負(fù)載均衡:

我們知道,Spring Cloud 提供了 Ribbon 來實(shí)現(xiàn)負(fù)載均衡,使用 Ribbo 直接注入一個 RestTemplate 對象即可,RestTemplate 已經(jīng)做好了負(fù)載均衡的配置;

在 Spring Cloud 下,使用 Feign 也是直接可以實(shí)現(xiàn)負(fù)載均衡的,定義一個有@FeignClient 注解的接口,然后使用@RequestMapping 注解到方法上映射遠(yuǎn)程的 REST 服務(wù),此方法也是做好負(fù)載均衡配置的;

通過feign只需要定義服務(wù)綁定接口且以聲明式的方法,優(yōu)雅而簡單的實(shí)現(xiàn)了服務(wù)調(diào)用;

 

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2010-04-21 12:57:33

RAC負(fù)載均衡配置

2023-10-30 11:28:33

Kubernetes負(fù)載均衡

2019-06-19 14:58:38

服務(wù)器負(fù)載均衡客戶端

2025-03-07 08:57:46

HTTP客戶端框架

2010-05-12 15:46:51

Subversion客

2021-08-23 06:59:22

Nacos負(fù)載均衡客戶端

2009-03-04 10:27:50

客戶端組件桌面虛擬化Xendesktop

2010-04-08 15:35:13

Oracle 簡易客戶

2020-04-23 09:32:33

zookeeperCP系統(tǒng)

2010-06-01 14:11:11

TortoiseSVN

2013-06-08 09:59:15

VMwarevSphere Web

2010-03-18 16:49:43

Java Socket

2009-07-24 17:31:56

ASP.NET AJA

2010-05-31 15:55:42

2023-10-27 17:23:03

Ribbon負(fù)載均衡策略

2009-08-21 16:14:52

服務(wù)端與客戶端通信

2010-03-18 15:44:22

VSTS 2010VS 2010

2011-08-17 10:10:59

2021-09-22 15:46:29

虛擬桌面瘦客戶端胖客戶端

2010-05-05 18:58:34

STP負(fù)載均衡
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號