日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

Spring Cloud【Finchley】-17 使用Zuul为单个或全部微服务提供容错与回退功能

發(fā)布時(shí)間:2025/3/21 javascript 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Cloud【Finchley】-17 使用Zuul为单个或全部微服务提供容错与回退功能 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 概述
  • 沒(méi)有添加fallback功能的示例
  • 使用zuul為單個(gè)微服務(wù)添加容錯(cuò)和回退功能
    • Step1. 新建微服務(wù)microservice-gateway-zuul-fallback
    • Step2. FallbackProvider實(shí)現(xiàn)類(lèi)
    • Step3. 測(cè)試
  • 為全部微服務(wù)提供回退
    • 代碼改造
    • zuul-fallback工程application.yml修改
    • 測(cè)試驗(yàn)證
  • 代碼

概述

Spring Cloud【Finchley】-14 微服務(wù)網(wǎng)關(guān)Zuul的搭建與使用 # Step8. 網(wǎng)關(guān)功能-Hystrix監(jiān)控測(cè)試中我們測(cè)試了Zuul默認(rèn)集成了Hystrix的監(jiān)控,但是沒(méi)有提及容錯(cuò)。

這里我們來(lái)學(xué)習(xí)下zuul的容錯(cuò)與回退功能如何實(shí)現(xiàn)。

官方指導(dǎo):https://cloud.spring.io/spring-cloud-static/Finchley.SR2/single/spring-cloud.html#hystrix-fallbacks-for-routes


沒(méi)有添加fallback功能的示例

順著 https://blog.csdn.net/yangshangwei/article/details/85850470#Step8_Hystrix_192 的操作步驟,如果我們將micorservice-provider-user 停掉,繼續(xù)多次調(diào)用,查看Dashboard

上圖可知:zuul的hystrix的監(jiān)控粒度是微服務(wù),而不是某個(gè)API,同樣的,經(jīng)過(guò)zuul的所有請(qǐng)求,都會(huì)被Hystrix保護(hù)起來(lái)。

zuul的配置規(guī)則如下:

zuul: routes:microservice-provider-user: /userprovider/**

所以可以這么訪問(wèn): http://localhost:4534/userprovider/user/4

這樣返回是不是很難看,下面我們來(lái)為zuul添加容錯(cuò)。


使用zuul為單個(gè)微服務(wù)添加容錯(cuò)和回退功能

Step1. 新建微服務(wù)microservice-gateway-zuul-fallback

為了不影響別的微服務(wù),我們新建個(gè)支持容錯(cuò)與回退功能的微服務(wù) ,在maven父工程上右鍵 新增mave module

代碼同 microservice-gateway-zuul的,為了區(qū)別,修改下application.yml中的端口,將port修改為4535


Step2. FallbackProvider實(shí)現(xiàn)類(lèi)

主要是兩個(gè)方法

  • getRoutes 方法,返回為哪個(gè)微服務(wù)提供回退功能
  • getBody 方法,微服務(wù)不可用時(shí)返回的信息
package com.artisan.microservice.fallback;import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream;import org.springframework.cloud.netflix.zuul.filters.route.FallbackProvider; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.client.ClientHttpResponse; import org.springframework.stereotype.Component;import com.netflix.hystrix.exception.HystrixTimeoutException; // 添加注解#Component使其成為Spring管理的bean @Component public class MyFallbackProvider implements FallbackProvider {@Overridepublic String getRoute() {// 為哪個(gè)微服務(wù)提供提供回退服務(wù),返回微服務(wù)的名字,必須和注冊(cè)在Eureka Server上的名字一致return "microservice-provider-user";}@Overridepublic ClientHttpResponse fallbackResponse(String route, final Throwable cause) {// fallback時(shí)的狀態(tài)碼if (cause instanceof HystrixTimeoutException) {return response(HttpStatus.GATEWAY_TIMEOUT);} else {return response(HttpStatus.INTERNAL_SERVER_ERROR);}}private ClientHttpResponse response(final HttpStatus status) {return new ClientHttpResponse() {@Overridepublic HttpStatus getStatusCode() throws IOException {return status;}@Overridepublic int getRawStatusCode() throws IOException {return status.value();}@Overridepublic String getStatusText() throws IOException {return status.getReasonPhrase();}@Overridepublic void close() {}@Overridepublic InputStream getBody() throws IOException {// 響應(yīng)體return new ByteArrayInputStream(("【 " +getRoute() + " 】fallback").getBytes());}@Overridepublic HttpHeaders getHeaders() {// headers設(shè)置HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);return headers;}};} }

Step3. 測(cè)試

  • 啟動(dòng)Eureka Server
  • 啟動(dòng)microservice-gateway-zuul-fallback
  • 啟動(dòng)micorservice-provider-user
  • 此時(shí),通過(guò)zuul去訪問(wèn)微服務(wù)micorservice-provider-user

    http://localhost:4535/userprovider/user/4

    停掉micorservice-provider-user,再次訪問(wèn)

    http://localhost:4535/userprovider/user/4

    可見(jiàn)回退功能生效了。


    為全部微服務(wù)提供回退


    代碼改造

    將 getRoute方法 返回 * or null

    @Overridepublic String getRoute() {return "*";}

    簡(jiǎn)單起見(jiàn),僅修改這一個(gè)地方,至于返回什么信息,我們這里也不做太復(fù)雜,保持和上面的示例一致即可。


    zuul-fallback工程application.yml修改

    zuul-fallback工程的zuul部分的配置信息:


    測(cè)試驗(yàn)證

    接下來(lái)測(cè)試下,為了驗(yàn)證我們起兩個(gè)微服務(wù):

  • 啟動(dòng)microservice-discovery-eureka
  • 啟動(dòng)microservice-provider-user
  • 啟動(dòng)micorservice-consumer-movie-ribbon
  • 啟動(dòng)microservice-gateway-zuul-fallback
  • 查看服務(wù)注冊(cè)情況 http://localhost:8761/

    查看zuul的路由信息 http://localhost:4535/actuator/routes

    先通過(guò)zuul微服務(wù)去訪問(wèn)其他兩個(gè)微服務(wù)

    電影微服務(wù): http://localhost:4535/userprovider/user/3

    {"id":3,"username":"artisan3","name":"小工匠三","age":30,"balance":300.00}

    用戶微服務(wù): http://localhost:4535/usermovie/movie/4

    {"id":4,"username":"artisan4","name":"小工匠4","age":40,"balance":400.00}

    停掉micorservice-consumer-movie-ribbon,再次通過(guò)zuul訪問(wèn)consumer-movie

    http://localhost:4535/usermovie/movie/4

    必須使用zuul代理的路徑訪問(wèn)才能生效,使用http://localhost:4535/micorservice-consumer-movie-ribbon/movie/4 不行,因?yàn)橥5舴?wù)后zuul的路由信息中 http://localhost:4535/actuator/routes 已經(jīng)沒(méi)有該代理信息了。

    同樣的停掉 microservice-provider-user, 再次訪問(wèn) http://localhost:4535/userprovider/user/3

    最后順便看下zuul的路由信息

    代碼

    https://github.com/yangshangwei/SpringCloudMaster/tree/master/microservice-gateway-zuul-fallback

    總結(jié)

    以上是生活随笔為你收集整理的Spring Cloud【Finchley】-17 使用Zuul为单个或全部微服务提供容错与回退功能的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。