亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

使用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

隆回县| 巫山县| 林西县| 峨眉山市| 宜城市| 武汉市| 佛教| 金溪县| 广平县| 来安县| 隆德县| 芜湖县| 道孚县| 台湾省| 怀来县| 陆川县| 定日县| 蓬安县| 莒南县| 安阳县| 固始县| 日照市| 齐齐哈尔市| 长垣县| 大安市| 吴川市| 石城县| 灵石县| 吐鲁番市| 黑水县| 大丰市| 饶阳县| 田林县| 农安县| 丹巴县| 原平市| 义马市| 呼图壁县| 福建省| 越西县| 贵德县|