激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - nacos gateway動態路由實戰

nacos gateway動態路由實戰

2021-12-28 13:24Insist_on_progress Java教程

這篇文章主要介紹了nacos gateway動態路由實戰,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

nacos gateway動態路由

說明:本次測試使用的gateway是2.2.2.RELEASE版本,其他版本可能存在不同

一、引入本次測試需要的pom依賴

     <!--gateway網關依賴-->
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-gateway</artifactId>
      </dependency>
      <!--nacos依賴-->
      <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
      </dependency>
      <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
      </dependency>
      <!--json工具包-->
      <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>fastjson</artifactId>
          <version>1.2.47</version>
      </dependency>

二、配置文件設置(*配置文件不生效的把名字改為bootstrap.yml)

server:
port: 8200

spring:
application:
  name: lc-gateway

cloud:
  nacos:
    discovery:
      #注冊中心地址
      server-addr: 106.12.146.239:8848
    config:
      server-addr: 106.12.146.239:8848
      # 配置中心-指定命名空間
      namespace: bb79a8c4-e4e1-4a27-bceb-0810f278b5aa
      # 指定配置文件后綴
      file-extension: yaml
      #配置組
      group: DEFAULT_GROUP
      #配置dateId
      data-id: lc-gateway
      #獲取配置超時時間
      timeout: 5000

  gateway:
    #設置超時時間默認
    httpclient:
      connect-timeout: 1000
      response-timeout: 5s

ps:這里集成了nacos配置中心想了解詳情請移步spring cloud集成nacos配置中心

三、動態路由實現

package com.lc.api.gateway.config;  
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.config.listener.Listener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.gateway.event.RefreshRoutesEvent;
import org.springframework.cloud.gateway.route.RouteDefinition;
import org.springframework.cloud.gateway.route.RouteDefinitionWriter;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Mono; 
import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.concurrent.Executor;

/**
* 動態路由,可以通過獲取Bean才做該類,提供增刪改查已經發布功能
*
* @Author: lc
* @Date: 2020/7/8 15:49
*/
@Service
public class DynamicRouteConfig implements ApplicationEventPublisherAware { 
  private static final Logger logger = LoggerFactory.getLogger(DynamicRouteConfig.class); 
  @Autowired
  private RouteDefinitionWriter routedefinitionWriter; 
  private ApplicationEventPublisher publisher; 
  @Value("${spring.cloud.nacos.config.data-id}")
  private String dataId;
  @Value("${spring.cloud.nacos.config.group}")
  private String group;
  @Value("${spring.cloud.nacos.config.server-addr}")
  private String serverAddr;
  @Value("${spring.cloud.nacos.config.namespace}")
  private String namespace;
  @Value("${spring.cloud.nacos.config.timeout}")
  private long timeout; 
  private static final List<String> ROUTE_LIST = new ArrayList<>();

  @PostConstruct
  public void dynamicRouteByNacosListener() {
      try {
          Properties prop = new Properties();
          prop.put("serverAddr", serverAddr);
          prop.put("namespace", namespace);
          ConfigService config = NacosFactory.createConfigService(prop);
          String content = config.getConfig(dataId, group, timeout);
          publisher(content);
          config.addListener(dataId, group, new Listener() {
              @Override
              public void receiveConfigInfo(String config) {
                  publisher(config);
              }

              @Override
              public Executor getExecutor() {
                  return null;
              }
          });
      } catch (Exception e) {
          e.printStackTrace();
      }
  }

  /**
   * 增加路由
   *
   * @param def
   * @return
   */
  public Boolean addRoute(RouteDefinition def) {
      try {
          routedefinitionWriter.save(Mono.just(def)).subscribe();
          ROUTE_LIST.add(def.getId());
      } catch (Exception e) {
          e.printStackTrace();
      }
      return true;
  }

  /**
   * 刪除路由
   *
   * @return
   */
  public Boolean clearRoute() {
      for (String id : ROUTE_LIST) {
          routedefinitionWriter.delete(Mono.just(id)).subscribe();
      }
      ROUTE_LIST.clear();
      return Boolean.FALSE;
  }

  /**
   * 發布路由
   */
  private void publisher(String config) {
      clearRoute();
      try {
          logger.info("Start updating dynamic routing ....");
          List<RouteDefinition> routeDefinitionList = JSONObject.parseArray(config, RouteDefinition.class);
          for (RouteDefinition route : routeDefinitionList) {
              logger.info(route.toString());
              addRoute(route);
          }
          publisher.publishEvent(new RefreshRoutesEvent(this.routedefinitionWriter));
          logger.info("update completed ");
      } catch (Exception e) {
          logger.error("Failed to update routing information", e);
          e.printStackTrace();
      } 
  }

  @Override
  public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
      publisher = applicationEventPublisher;
  } 
}

四、nacos配置中心設置

1.說明

nacos gateway動態路由實戰

2.新建一個網關配置

nacos gateway動態路由實戰

3. 添加配置格式如下

nacos gateway動態路由實戰

這里我就不注釋了大家應該都能看懂

[
  {
      "filters": [
          {
              "args": {
                  "parts": "1"
              },
              "name": "StripPrefix"
          }
      ],
      "id": "authent1",
      "order": -1,
      "predicates": [
          {
              "args": {
                  "pattern": "/authent/**"
              },
              "name": "Path"
          }
      ],
      "uri": "lb://lc-authenticate"
  }
]

五、測試

nacos gateway動態路由實戰

 

gateway網關相關配置

創建,使用initilizer,

  • Group:com.atguigu.gulimall
  • Artifact: gulimall-gateway
  • package:com.atguigu.gulimall.gateway

搜索gateway選中。

pom.xml里加上common依賴, 修改jdk版本

在啟動類中添加注解@EeableDiscoveryClient

nacos gateway動態路由實戰

配置nacos注冊中心地址

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.application.name=gulimall-gateway
server.port=88

bootstrap.properties 填寫配置中心地址

spring.application.name=gulimall-gateway
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=ab66aff2-0bd5-4f80-8a68-760d6ff7d96d

nacos里創建命名空間gateway

然后在命名空間里創建文件guilmall-gateway.yml

spring:
  application:
      name: gulimall-gateway

在主類中屏蔽數據源

nacos gateway動態路由實戰

在項目里創建application.yml

spring:
cloud:
  gateway:
    routes:
      - id: after_route
        uri: https://www.xiaomi.com
        predicates:
          - Query=url,xiaomi
#            若參數等于斷言 則跳轉到指定的uri

運行結果

nacos gateway動態路由實戰

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/qq_41988504/article/details/107227870

延伸 · 閱讀

精彩推薦
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
主站蜘蛛池模板: 久久亚洲第一 | 欧美自拍三区 | 国产精品视频免费在线观看 | 国产精品性夜天天视频 | 一级黄色国产视频 | 亚洲最大中文字幕 | 性欧美xxxx免费岛国不卡电影 | 国产交换3p国产精品 | av色哟哟| 国产精品免费小视频 | 日韩精品久 | h色视频在线观看 | 亚洲欧美日韩中文在线 | 久久精品成人影院 | 亚洲影院在线 | 精品国产一区二区三 | 中文字幕国产欧美 | 亚洲99| 国产欧美成人精品第二区 | 国产精品久久久久久238 | 国产亚洲精品久久久久久久久久 | 久章草在线视频 | av在线更新 | 午夜久久久精品一区二区三区 | 国产亚洲精品美女久久久 | 午夜精品久久久久久久久久久久久蜜桃 | 黄色美女网站免费看 | 午夜精品视频免费观看 | 成人午夜免费国产 | 欧美日韩中文字幕在线视频 | 香蕉视频h | 国产成年人在线观看 | 久久精品一二三区 | 一级毛片在线视频 | 欧美国产日韩在线观看成人 | 亚洲码无人客一区二区三区 | 国内精品久久久久久久久久久久 | 一级片观看 | 亚洲男人一区 | 日本中文高清 | 精品人人人人 |