之前了解过通过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和分布式资源

 

  

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐