前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >gateway整合nacos

gateway整合nacos

作者头像
技术从心
发布2020-05-22 15:15:45
2.9K0
发布2020-05-22 15:15:45
举报
文章被收录于专栏:技术从心

之前了解过通过springCloud整合阿里的nacos作为配置中心,由于之前的需求是想要配置中心搞成可管理的化的,而原始的springCloudConfig是要把配置放到git上再结合springCloudBus才能实现配置的动态刷新。

刚开始是研究了一下携程的apollo作为配置中心,但是光是搭建起来就花了一些功夫,然后再整合到springcloud中,感觉还是有点麻烦的,后来也不知哪里听说的阿里的nacos也可以做就抱着试一下的心态学了一下。

学完就发现非常的简单,不光是搭建简单而且整合起来也非常的容易,nacos可以作为配置中心,但是因为项目的一直用的是eureka所以也就没去想那部分,偶尔心血来潮就整了下gateway+naocs过程非常的简单。

首先依赖的版本要对应好,不然会有很多的问题 图片和代码

代码语言:javascript
复制
<?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配置:

代码语言:javascript
复制
server:
    port: 9099
spring:
    application:
        name: api-gateway-nacos
    cloud:
        nacos:
            discovery:
                server-addr: 127.0.0.1:8848

application.yml配置:

代码语言:javascript
复制
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就顺利的完成了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 技术从心 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档