亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

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

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

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

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

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

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

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

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

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

然后我們就可以利用自動(dòng)注入的形式在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);
    }

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

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

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

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

@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管理,不然跑起來就是一個(gè)沒有實(shí)例化的字節(jié)碼文件,根本用不了。

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

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

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

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

其次我們來換一種熔斷處理,也就是利用hystrix去實(shí)現(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組件用起來也是十分的簡(jiǎn)單,會(huì)對(duì)你的要求進(jìn)行不同的配置,這里本文只展示最基本的使用舉例:

/*開啟熔斷器*/
@EnableCircuitBreaker

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

    @Autowired
    private RestTemplate restTemplate;
    @RequestMapping(value = "/buy/{id}", method = RequestMethod.GET)
    @HystrixCommand(fallbackMethod = "getProductFallBack") //給接口配置hystrix熔斷降級(jí)方法
    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降級(jí)方法必須與熔斷方法保持一致參數(shù),一致返回類型*/
    public Product getProductFallBack(int id) {
        Product product = new Product();
        product.setId(-1);
        product.setProductName("服務(wù)熔斷");
        return product;
    }

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

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

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/**

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

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

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

相關(guān)文章

  • java框架之maven是用來做什么的

    java框架之maven是用來做什么的

    這篇文章主要介紹了java之maven是用來做什么的,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • RestTemplate接口調(diào)用神器常見用法匯總

    RestTemplate接口調(diào)用神器常見用法匯總

    這篇文章主要介紹了RestTemplate接口調(diào)用神器常見用法匯總,通過案例代碼詳細(xì)介紹RestTemplate接口調(diào)用神器常見用法,需要的朋友可以參考下
    2022-07-07
  • Java對(duì)接ansible自動(dòng)運(yùn)維化平臺(tái)方式

    Java對(duì)接ansible自動(dòng)運(yùn)維化平臺(tái)方式

    這篇文章主要介紹了Java對(duì)接ansible自動(dòng)運(yùn)維化平臺(tái)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Maven默認(rèn)使用JDK1.5的問題及解決方案

    Maven默認(rèn)使用JDK1.5的問題及解決方案

    這篇文章主要介紹了Maven默認(rèn)使用JDK1.5的問題及解決方案,本文給大家分享兩種方式,通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • java ArrayList.remove()的三種錯(cuò)誤用法以及六種正確用法詳解

    java ArrayList.remove()的三種錯(cuò)誤用法以及六種正確用法詳解

    這篇文章主要介紹了java ArrayList.remove()的三種錯(cuò)誤用法以及六種正確用法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • JavaAgent實(shí)現(xiàn)http接口發(fā)布方式淺析

    JavaAgent實(shí)現(xiàn)http接口發(fā)布方式淺析

    這篇文章主要介紹了JavaAgent實(shí)現(xiàn)http接口發(fā)布方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-03-03
  • ExecutorService Callable Future多線程返回結(jié)果原理解析

    ExecutorService Callable Future多線程返回結(jié)果原理解析

    這篇文章主要為大家介紹了ExecutorService Callable Future多線程返回結(jié)果,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 淺析Java基于Socket的文件傳輸案例

    淺析Java基于Socket的文件傳輸案例

    這篇文章主要針對(duì)Java基于Socket的文件傳輸案例進(jìn)行詳細(xì)解析,具有一定的參考價(jià)值,感興趣的朋友可以參考一下
    2016-02-02
  • 更改Maven軟件源為阿里云源的方法詳解

    更改Maven軟件源為阿里云源的方法詳解

    這篇文章主要介紹了更改Maven軟件源為阿里云源的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • java 線程的生命周期詳解

    java 線程的生命周期詳解

    這篇文章主要介紹了java 線程的生命周期詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07

最新評(píng)論