中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用SpringCloud Zuul怎么實現動態路由

發布時間:2021-05-27 17:36:10 來源:億速云 閱讀:219 作者:Leah 欄目:編程語言

本篇文章為大家展示了使用SpringCloud Zuul怎么實現動態路由,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

maven引入Zuul

 <!-- Zuul -->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
    </dependency>

配置文件

server.port=10010
spring.application.name=zuul-server
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
#健康檢查(需要spring-boot-starter-actuator依賴)
eureka.client.healthcheck.enabled=true
# 續約更新時間間隔(默認30秒)
eureka.instance.lease-renewal-interval-in-seconds=10
# 續約到期時間(默認90秒)
eureka.instance.lease-expiration-duration-in-seconds=10

#zuul代理配置 zuul.routes.服務名.path,服務名要與注冊的一致
#應用名映射
zuul.routes.myspringboot.path=/myspringboot/**
zuul.routes.myspringboot.service-id=myspringboot

#URL映射
#zuul.routes.myspringboot.path=/myspringboot/**
#zuul.routes.myspringboot-url.url=http://localhost:10087/

自定義Zuul過濾器

更多的檢查規則后續慢慢健全

/**
 * Zuul過濾器,實現了路由檢查
 */
public class AccessFilter extends ZuulFilter {

  /**
   * 通過int值來定義過濾器的執行順序
   */
  @Override
  public int filterOrder() {
    // PreDecoration之前運行
    return PRE_DECORATION_FILTER_ORDER - 1;
  }

  /**
   * 過濾器的類型,在zuul中定義了四種不同生命周期的過濾器類型:
   *   public static final String ERROR_TYPE = "error";
   *   public static final String POST_TYPE = "post";
   *   public static final String PRE_TYPE = "pre";
   *   public static final String ROUTE_TYPE = "route";
   */
  @Override
  public String filterType() {
    return PRE_TYPE;
  }

  /**
   * 過濾器的具體邏輯
   */
  @Override
  public Object run() {
    RequestContext ctx = RequestContext.getCurrentContext();
    HttpServletRequest request = ctx.getRequest();
    System.out.println(String.format("%s AccessFilter request to %s", request.getMethod(),request.getRequestURL().toString()));
    String accessToken = request.getParameter("accessToken");
    //有權限令牌
    if (!StringUtils.isEmpty(accessToken)) {
      ctx.setSendZuulResponse(true);
      ctx.setResponseStatusCode(200);
      //可以設置一些值
      ctx.set("isSuccess", true);
      return null;
    } else {
      ctx.setSendZuulResponse(false);
      ctx.setResponseStatusCode(401);
      ctx.setResponseBody("{\"result\":\"accessToken is not correct!\"}");
      //可以設置一些值
      ctx.set("isSuccess", false);
      return null;
    }
  }

  /**
   * 返回一個boolean類型來判斷該過濾器是否要執行
   */
  @Override
  public boolean shouldFilter() {
    return true;
  }
}

啟動類

添加@EnableZuulProxy注解并使用自定義過濾器

@EnableZuulProxy
@SpringBootApplication
public class ZuulServerApplication {

  public static void main(String[] args) {
    SpringApplication.run(ZuulServerApplication.class, args);
  }

  @Bean
  public AccessFilter accessFilter() {
    return new AccessFilter();
  }
}

效果演示

啟動所有項目,我們在Eureka上注冊了四個服務,相比上篇(SpringCloud系列——Ribbon 負載均衡)多了一個Zuul

使用SpringCloud Zuul怎么實現動態路由

瀏覽器訪問 http://localhost:10010/myspringboot/feign/ribbon、http://localhost:10010/myspringboot/feign/ribbon?accessToken=123456

http://localhost:10010/ 這個端口對外暴露,相對于總入口,后面接不同的路徑由,Zuul路由到對應的服務上

1、沒有accessToken是,無法通過檢查

2、攜帶accessToken時,可正常路由,并且Feign調用、Ribbon負載均衡

使用SpringCloud Zuul怎么實現動態路由

上述內容就是使用SpringCloud Zuul怎么實現動態路由,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

菏泽市| 繁峙县| 花垣县| 衡南县| 威海市| 南陵县| 富锦市| 社会| 凌云县| 张家港市| 康马县| 六安市| 吴旗县| 岳西县| 鹤庆县| 海宁市| 丹棱县| 乌海市| 蚌埠市| 卫辉市| 田林县| 丽江市| 读书| 时尚| 屯门区| 沿河| 达日县| 屏边| 加查县| 山阳县| 吉隆县| 电白县| 五华县| 德清县| 和顺县| 师宗县| 龙川县| 体育| 原阳县| 密山市| 兰州市|