最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

nacos gateway動態(tài)路由實戰(zhàn)

 更新時間:2021年09月11日 14:40:31   作者:Insist_on_progress  
這篇文章主要介紹了nacos gateway動態(tài)路由實戰(zhàn),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

nacos gateway動態(tài)路由

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

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

       <!--gateway網(wǎng)關(guān)依賴-->
        <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>

二、配置文件設(shè)置(*配置文件不生效的把名字改為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:
      #設(shè)置超時時間默認(rèn)
      httpclient:
        connect-timeout: 1000
        response-timeout: 5s

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

三、動態(tài)路由實現(xiàn)

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;
 
/**
 * 動態(tài)路由,可以通過獲取Bean才做該類,提供增刪改查已經(jīng)發(fā)布功能
 *
 * @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;
    }
 
    /**
     * 發(fā)布路由
     */
    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配置中心設(shè)置

1.說明

2.新建一個網(wǎng)關(guān)配置

3. 添加配置格式如下

這里我就不注釋了大家應(yīng)該都能看懂

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

五、測試

gateway網(wǎng)關(guān)相關(guān)配置

創(chuàng)建,使用initilizer,

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

搜索gateway選中。

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

在啟動類中添加注解@EeableDiscoveryClient

在這里插入圖片描述

配置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里創(chuàng)建命名空間gateway

然后在命名空間里創(chuàng)建文件guilmall-gateway.yml

spring:
    application:
        name: gulimall-gateway

在主類中屏蔽數(shù)據(jù)源

在這里插入圖片描述

在項目里創(chuàng)建application.yml

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

運行結(jié)果

在這里插入圖片描述

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • JAVA Spring Boot 自動配置實現(xiàn)原理詳解

    JAVA Spring Boot 自動配置實現(xiàn)原理詳解

    這篇文章主要介紹了詳解SpringBoot自動配置原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-09-09
  • 淺談Java垃圾回收機制

    淺談Java垃圾回收機制

    Java 中,程序員不需要關(guān)心所有不再使用的對象。垃圾回收機制自動銷毀這些對象。垃圾回收機制是守護(hù)線程的最佳示例,因為它始終在后臺運行。垃圾回收機制的主要目標(biāo)是通過銷毀無法訪問的對象來釋放堆內(nèi)存。下面我們就來詳細(xì)介紹吧
    2021-09-09
  • 基于SpringBoot構(gòu)建電商秒殺項目代碼實例

    基于SpringBoot構(gòu)建電商秒殺項目代碼實例

    這篇文章主要介紹了基于SpringBoot構(gòu)建電商秒殺項目代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • java 圖片驗證碼的實現(xiàn)代碼

    java 圖片驗證碼的實現(xiàn)代碼

    java 圖片驗證碼的實現(xiàn)代碼,需要的朋友可以參考一下
    2013-05-05
  • java多線程處理執(zhí)行solr創(chuàng)建索引示例

    java多線程處理執(zhí)行solr創(chuàng)建索引示例

    這篇文章主要介紹了java多線程處理執(zhí)行solr創(chuàng)建索引示例,需要的朋友可以參考下
    2014-02-02
  • 詳解maven BUILD FAILURE的解決辦法

    詳解maven BUILD FAILURE的解決辦法

    這篇文章主要介紹了詳解maven BUILD FAILURE的解決辦法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • java實現(xiàn)表格tr拖動的實例(分享)

    java實現(xiàn)表格tr拖動的實例(分享)

    下面小編就為大家分享一篇java實現(xiàn)表格tr拖動的實例。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Spring MVC 擴展和 SSM 框架整合步驟詳解

    Spring MVC 擴展和 SSM 框架整合步驟詳解

    在前端頁面后后臺交互的過程中,需要一種格式清晰、高效且兩端都可以輕松使用的數(shù)據(jù)格式做交互的媒介,JSON正可以滿足這一需求,下面學(xué)習(xí)使用Spring MVC 框架處理JSON數(shù)據(jù),感興趣的朋友一起看看吧
    2024-08-08
  • java鏈表的常見簡單面試算法題詳解

    java鏈表的常見簡單面試算法題詳解

    文章總結(jié):本文主要介紹了單鏈表的基本操作,包括頭插法、尾插法、鏈表翻轉(zhuǎn)、鏈表成環(huán)判斷、成環(huán)位置判斷、成環(huán)長度判斷,以及有序鏈表的合并,通過實例和代碼示例,詳細(xì)講解了每種操作的原理和實現(xiàn)方法
    2025-01-01
  • 解決springmvc關(guān)于前臺日期作為實體類對象參數(shù)類型轉(zhuǎn)換錯誤的問題

    解決springmvc關(guān)于前臺日期作為實體類對象參數(shù)類型轉(zhuǎn)換錯誤的問題

    下面小編就為大家?guī)硪黄鉀Qspringmvc關(guān)于前臺日期作為實體類對象參數(shù)類型轉(zhuǎn)換錯誤的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06

最新評論

昌黎县| 汽车| 景泰县| 大城县| 新营市| 梁山县| 皮山县| 公安县| 昌江| 通城县| 阿拉尔市| 雷山县| 如皋市| 惠来县| 西贡区| 离岛区| 蒙自县| 邢台市| 莱芜市| 诏安县| 资源县| 百色市| 广水市| 潍坊市| 蒙山县| 青阳县| 泗水县| 绥棱县| 宜春市| 开平市| 城口县| 阳春市| 青冈县| 尼玛县| 洛隆县| 灵璧县| 建瓯市| 淳化县| 闵行区| 昌吉市| 万宁市|