gateway整合nacos

之前瞭解過通過springCloud整合阿里的nacos作爲配置中心,由於之前的需求是想要配置中心搞成可管理的化的,而原始的springCloudConfig是要把配置放到git上再結合springCloudBus才能實現配置的動態刷新。

 

剛開始是研究了一下攜程的apollo作爲配置中心,但是光是搭建起來就花了一些功夫,然後再整合到springcloud中,感覺還是有點麻煩的,後來也不知哪裏聽說的阿里的nacos也可以做就抱着試一下的心態學了一下。

 

學完就發現非常的簡單,不光是搭建簡單而且整合起來也非常的容易,nacos可以作爲配置中心,但是因爲項目的一直用的是eureka所以也就沒去想那部分,偶爾心血來潮就整了下gateway+naocs過程非常的簡單。

 

首先依賴的版本要對應好,不然會有很多的問題 圖片和代碼

 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.lyj</groupId>
    <artifactId>api-gateway-nacos</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>api-gateway-nacos</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
        <spring-cloud-alibaba.version>0.2.1.RELEASE</spring-cloud-alibaba.version>
        <swagger.version>2.9.2</swagger.version>
    </properties>

    <dependencies>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>-->

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>

        <!-- API文檔配置 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>${swagger.version}</version>
        </dependency>

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>${swagger.version}</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.20</version>
        </dependency>
        
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <!--skip tests-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

Maven的配置可以按照我的這個配置,然後配置對應的yml和所需的註解

 

 

bootstrap.yml配置:

server:
    port: 9099
spring:
    application:
        name: api-gateway-nacos
    cloud:
        nacos:
            discovery:
                server-addr: 127.0.0.1:8848

application.yml配置:

spring:  cloud:    gateway:      discovery:        locator:          enabled: true          lowerCaseServiceId: true # 請求服務是小寫的時候改成true(默認爲false輕微服務必須是大寫)      routes:        - id: user          uri: lb://user  # 服務端 service_id          order: 8089          # 網關斷言匹配          predicates:            - Path=/user/**    # 路由映射路徑 這裏注意,這個路徑會追加到 service_id後          filters:            - GwSwaggerHeaderFilter            - StripPrefix=1  # 轉發過濾前綴個數            
ribbon:  eureka:    enabled: true # 開啓eureka輪詢  eager-load:    enabled: true  # 開啓Ribbon的飢餓加載模式(防止第一次請求超時的問題)    clients: user, product # 指定需要開啓的服務(需要開啓Ribbon的飢餓加載模式)  ReadTimeout: 60000  ConnectTimeout: 60000  MaxAutoRetries: 0  MaxAutoRetriesNextServer: 1  OkToRetryOnAllOperations: false
# 設置最大容錯超時時間# 執行超時時間爲9秒,會對服務熔斷路由defaultfallback生效hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 90000

# 設置最大容錯超時時間hystrix:  threadpool:    default:      coreSize: 100      maximumSize: 5000      allowMaximumSizeToDivergeFromCoreSize: true      maxQueueSize: -1  command:    default:      circuitBreaker:        # 是否強制將斷路器設置成開啓狀態(true開啓,false不開啓)最好不開啓否者會導致訪問服務一直熔斷        foreOpen: false      execution:        timeout:          enabled: true        isolation:          thread:            timeoutInMilliseconds: 900000

 

這邊配置的註釋已經寫的很清楚了,可以根據需要CRUD,接着啓動windows的nacos

 

 

然後啓動項目

 

 

服務已經成功註冊上來,接着註冊對應服務隨便寫個測試類調用即可成功的實現網關的轉發調用

 

 

 

註冊服務的端口是9090,網關服務的端口是9099

 

 

通過網關的端口成功調用到jwt服務的應用,到這gateway整合nacos就順利的完成了。

 

關注公衆號領取學習java和分佈式資源

 

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章