最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringCloud實現(xiàn)服務(wù)調(diào)用feign與熔斷hystrix和網(wǎng)關(guān)gateway詳細(xì)分析

 更新時間:2023年04月03日 10:16:00   作者:ForestSpringH  
這篇文章主要介紹了SpringCloud實現(xiàn)服務(wù)調(diào)用feign與熔斷hystrix和網(wǎng)關(guān)gateway,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧

回歸cloud的學(xué)習(xí),對于springcloud的架構(gòu)與原理以及性能的分析我們都在之前的文章里寫過:

springcloud架構(gòu)的認(rèn)識

我們之前測試過eureka服務(wù)注冊功能,它能很好的保存服務(wù)之間的通訊關(guān)系,是維系微服務(wù)通訊網(wǎng)之間的電話本,同時也能夠以心跳檢測的形式監(jiān)聽每一個微服務(wù)的生命狀態(tài),對于結(jié)點進(jìn)行很好的監(jiān)控。那么我們今天的服務(wù)調(diào)用就是將接口變得易于管理,更簡單的去調(diào)用分布式系統(tǒng)內(nèi)的微服務(wù)。而對于同一時間大量調(diào)用的某一個微服務(wù)來說它的壓力是巨大了,但是出于用戶體驗的原因,我們必須對用戶返回什么,對前端給出一個響應(yīng),而不是掛出404或者非常慢的響應(yīng)。那么熔斷降級的處理就是非常合適的做法。另外我們對于分布式調(diào)用微服務(wù)的形式也應(yīng)、配置一個類似于nignx之類的主機(jī)進(jìn)行反向的分發(fā)。在我們的cloud生態(tài)立提供了gateway網(wǎng)關(guān)組件去實現(xiàn)請求的分發(fā)與微服務(wù)路由的管理。

那么就讓我們用上次測試eureka的項目進(jìn)行測試:

首先是利用feign組件實現(xiàn)服務(wù)調(diào)用與熔斷降級(這里的熔斷可以自行去配置,默認(rèn)是超過1秒沒給出響應(yīng)就返回熔斷的降級響應(yīng)):

  <!--引入feign服務(wù)調(diào)用-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

以上是feign的依賴,我們之前的項目采取的是父工程pom繼承體系,便于管理公共依賴。

/*開啟服務(wù)調(diào)用Feign的使用*/
@EnableFeignClients

在orderApplication類上打上開啟feign服務(wù)組件的注解。

這里先介紹如何使用feign實現(xiàn)簡單的微服務(wù)調(diào)用:

我們需要有接口作為一個product服務(wù)調(diào)用的客戶端(可以含有很多這樣的客戶端,便于管理不同的微服務(wù)調(diào)用接口)當(dāng)前我們是order模塊:

/*對應(yīng)調(diào)用的微服務(wù)名稱*/
@FeignClient(name = "product")
public interface FeignInterface {
    /*對應(yīng)微服務(wù)的訪問路徑*/
    @GetMapping("/product/{id}")
    Product findById(@PathVariable("id")int id);
}

然后我們就可以利用自動注入的形式在controller里優(yōu)化接口了:

    @Autowired
    private FeignInterface feignInterface;
    @GetMapping("/buyByFeign/{id}")
    public Product getProductByFeign(@PathVariable("id") int id) {
        return feignInterface.findById(id);
    }

細(xì)心的同志可以看到之前的controller接口是這樣的:

    @Autowired
    private RestTemplate restTemplate;
    @RequestMapping(value = "/buy/{id}", method = RequestMethod.GET)
    public Product getProductById(@PathVariable("id") int id) {
        return restTemplate.getForObject("http://product/product/" + id, Product.class);
    }

兩相對比,我們發(fā)現(xiàn)feign服務(wù)調(diào)用的形式完全不需要寫任何請求語句,也不需要處理與product微服務(wù)之間的響應(yīng)。瀏覽器訪問時依舊按照order接口上的路徑去寫即可。

其次介紹一下feign實現(xiàn)的熔斷:

我們對某一個微服務(wù)調(diào)用路線準(zhǔn)備熔斷:舉個例子,本文主要是order與product模塊之間的調(diào)用關(guān)系,因此熔斷也就是處理從order到product模塊之間的請求路線:

下一個實現(xiàn)類去實現(xiàn)feign服務(wù)調(diào)用接口實現(xiàn)的方法就是我們的熔斷方法(注意這里開啟熔斷器服務(wù)的注解也需打在orderApplication類上,在下面介紹hystrix時會給出來):

@Component("feignHystrix")
public class FeignHystrix implements FeignInterface{
    public Product findById(int id) {
        Product product = new Product();
        product.setId(-1);
        product.setProductName("服務(wù)熔斷");
        return product;
    }
}

要打上spring組件注解交給spring管理,不然跑起來就是一個沒有實例化的字節(jié)碼文件,根本用不了。

其次我們需要告訴feign客戶端,你這條調(diào)用線路的熔斷降級處理類型:

@FeignClient(name = "product",fallback = FeignHystrix.class)
public interface FeignInterface {
    @GetMapping("/product/{id}")
    Product findById(@PathVariable("id")int id);
}

fallback = FeignHystrix.class就是確定熔斷降級類型的配置。

這樣的方式就可以實現(xiàn)feign的服務(wù)調(diào)用與熔斷降級了。但是會出現(xiàn)直接就是熔斷方法的響應(yīng),原因是在controller層的自動注入會直接默認(rèn)你注入的是接口的實現(xiàn)類型,這里我們最好是綁定一下name。

其次我們來換一種熔斷處理,也就是利用hystrix去實現(xiàn)服務(wù)調(diào)用關(guān)系間的熔斷處理:

        <!--引入服務(wù)熔斷hystrix-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
            <version>2.2.10.RELEASE</version>
        </dependency>

以上是它的依賴,hystrix組件用起來也是十分的簡單,會對你的要求進(jìn)行不同的配置,這里本文只展示最基本的使用舉例:

/*開啟熔斷器*/
@EnableCircuitBreaker

記住在Application類上開啟熔斷器才行,基本的使用十分簡單就是直接在controller接口類里這么寫就可以:

    @Autowired
    private RestTemplate restTemplate;
    @RequestMapping(value = "/buy/{id}", method = RequestMethod.GET)
    @HystrixCommand(fallbackMethod = "getProductFallBack") //給接口配置hystrix熔斷降級方法
    public Product getProductById(@PathVariable("id") int id) {
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            System.out.println("睡兩秒等熔斷");
        }
        return restTemplate.getForObject("http://product/product/" + id, Product.class);
    }
    /*hystrix降級方法必須與熔斷方法保持一致參數(shù),一致返回類型*/
    public Product getProductFallBack(int id) {
        Product product = new Product();
        product.setId(-1);
        product.setProductName("服務(wù)熔斷");
        return product;
    }

注意這個降級的方法是有要求的,參數(shù)類型與返回值要與接口方法一致。你也可以建立一個新的類型里面統(tǒng)一的書寫降級方法,調(diào)用時配置上類型與方法的路徑即可(默認(rèn)是1秒不給響應(yīng)就采取熔斷降級,所以直接開線程睡2秒測試熔斷響應(yīng))。

注冊中心與服務(wù)發(fā)現(xiàn)可以使得微服務(wù)之間鴿子能夠查詢到各自的存在,不需要開發(fā)者手動的配置各個微服務(wù)的路由。服務(wù)調(diào)用與熔斷降級有效的將微服務(wù)之間的調(diào)用與流量的壓力進(jìn)行了管控與優(yōu)化,但是由客戶端或者是瀏覽器發(fā)送來的請求如果還是直接ip加端口加訪問路徑的話,未必就太麻煩了?這樣對于前端開發(fā)來說也是很大的痛點!所以nignx反向代理很受歡迎,也是采用一個nignx.conf文件作為內(nèi)部系統(tǒng)服務(wù)接口的通訊錄,外部請求統(tǒng)一ip與端口只需要給我你想要訪問的服務(wù)名稱我就可以幫你通訊。這也就是網(wǎng)關(guān)的基本功能。當(dāng)然如果簡單的路由分發(fā)nignx完全可以充當(dāng)網(wǎng)關(guān)的角色,這里我們先介紹一下gateway組件的基本使用:

         <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

以上是gateway的依賴,我們需要前置知道的是gateway與spring web有沖突,所以最好不要安裝web的依賴,如果和我一樣是父工程pom管理的可以在application.yml文件配置這一項解決沖突:

spring:
  application:
    name: gateway
  main:
    web-application-type: reactive

其次就是網(wǎng)關(guān)的配置信息了(你不需要寫任何類型文件,只需要淺淺的配置一下yml文件):

spring: 
    cloud:
        gateway:
          routes:
          - id: order
            uri: http://127.0.0.1:9002
            predicates:
            - Path=/order/**
          - id: product
            uri: http://127.0.0.1:9001
            predicates:
            - Path=/product/**

這個routers像極了view項目里我們書寫的router.js里的routes[]數(shù)組的內(nèi)容,微服務(wù)注冊名稱,微服務(wù)內(nèi)部訪問路徑,微服務(wù)默認(rèn)的訪問入口(這里的入口是controller類型上打的@RequestMapping內(nèi)容,后面的二級三級就是我們需要填寫訪問的)舉個例子(gateway默認(rèn)的端口是8080)我們現(xiàn)在需要訪問order微服務(wù)的buy/1去查1號商品,之前我們的訪問方式是:http://127.0.0.1:9002/order/buy/1

現(xiàn)在配置完以上的網(wǎng)關(guān)內(nèi)容后我們只需要訪問localhost:8080/order/buy/1(注意這個order是代表微服務(wù)名稱,也就是你配置的id,可不是controller類型的一級路由)。

到此這篇關(guān)于SpringCloud實現(xiàn)服務(wù)調(diào)用feign與熔斷hystrix和網(wǎng)關(guān)gateway詳細(xì)分析的文章就介紹到這了,更多相關(guān)SpringCloud服務(wù)調(diào)用feign內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java使用openssl檢測網(wǎng)站是否支持ocsp

    Java使用openssl檢測網(wǎng)站是否支持ocsp

    OCSP在線證書狀態(tài)協(xié)議是為了替換CRL而提出來的。對于現(xiàn)代web服務(wù)器來說一般都是支持OCSP的,OCSP也是現(xiàn)代web服務(wù)器的標(biāo)配,這篇文章主要介紹了Java使用openssl檢測網(wǎng)站是否支持ocsp,需要的朋友可以參考下
    2022-07-07
  • java?線程池如何執(zhí)行策略又拒絕哪些策略

    java?線程池如何執(zhí)行策略又拒絕哪些策略

    這篇文章主要介紹了java?線程池如何執(zhí)行策略又拒絕哪些策略,文章通過線程池的執(zhí)行方法?execute()?展開全篇內(nèi)容,需要的小伙伴可以參考一下
    2022-05-05
  • Java中覆蓋finalize()方法實例代碼

    Java中覆蓋finalize()方法實例代碼

    這篇文章主要介紹了Java中覆蓋finalize()方法實例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • java實現(xiàn)上傳圖片并壓縮圖片大小功能

    java實現(xiàn)上傳圖片并壓縮圖片大小功能

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)上傳圖片并壓縮圖片大小功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Java設(shè)計模式之觀察者模式(Observer模式)

    Java設(shè)計模式之觀察者模式(Observer模式)

    這篇文章主要介紹了Java設(shè)計模式之觀察者模式(Observer模式),文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Java中的SimpleDateFormat使用詳解

    Java中的SimpleDateFormat使用詳解

    SimpleDateFormat 是一個以國別敏感的方式格式化和分析數(shù)據(jù)的具體類。這篇文章主要介紹了Java中的SimpleDateFormat使用詳解,需要的朋友可以參考下
    2017-03-03
  • springboot整合mybatis將sql打印到日志的實例詳解

    springboot整合mybatis將sql打印到日志的實例詳解

    這篇文章主要介紹了springboot整合mybatis將sql打印到日志的實例詳解,需要的朋友可以參考下
    2017-12-12
  • 手動構(gòu)建springBoot啟動器過程圖解

    手動構(gòu)建springBoot啟動器過程圖解

    這篇文章主要介紹了手動構(gòu)建springBoot啟動器過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • elasticsearch開發(fā)中data-streams使用解析

    elasticsearch開發(fā)中data-streams使用解析

    這篇文章主要為大家介紹了elasticsearch開發(fā)中data-streams使用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Java實現(xiàn)求解一元n次多項式的方法示例

    Java實現(xiàn)求解一元n次多項式的方法示例

    這篇文章主要介紹了Java實現(xiàn)求解一元n次多項式的方法,涉及java高斯消元法處理矩陣運(yùn)算解多項式的相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01

最新評論

漳浦县| 广安市| 封丘县| 交口县| 十堰市| 礼泉县| 于田县| 垣曲县| 绩溪县| 云林县| 调兵山市| 陇川县| 庆阳市| 庆元县| 乌兰察布市| 娄烦县| 剑川县| 梅州市| 溆浦县| 武功县| 临颍县| 迁安市| 云南省| 雅江县| 泰州市| 天峻县| 哈密市| 靖宇县| 雅安市| 启东市| 澄城县| 南城县| 鄂尔多斯市| 上蔡县| 清涧县| 鄂尔多斯市| 鄂托克旗| 龙门县| 镇原县| 滦平县| 井研县|