前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Cloud Alibaba Nacos+Gateway踩坑

Spring Cloud Alibaba Nacos+Gateway踩坑

作者头像
赵哥窟
发布2022-05-13 18:44:30
6680
发布2022-05-13 18:44:30
举报
文章被收录于专栏:日常技术分享日常技术分享

最近学习Nacos和Gateway的使用,把这些天踩的坑做一个记录,

Mac M1芯片

Nacos 的使用倒是比较简单,但是由于用的Mac M1芯片的电脑,使用过程中踩坑在上一篇已经写过了

Mac M1芯片Nacos

项目整体目录

截屏2022-05-07 17.59.05.png

Gateway

目的就是想用Gateway 来做项目接口访问的统一入口

pom文件

代码语言:javascript
复制
 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

  <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.6.RELEASE</version>
        </dependency>

        <!-- gateway 网关依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
            <version>2.2.9.RELEASE</version>
        </dependency>

application.yml 文件 因为我使用GateWayConfig 配置Gateway,所以就没有在

application.yml 配置Gateway

代码语言:javascript
复制
# 应用服务 WEB 访问端口
server:
  port: 9092
spring:
  application:
    name: project-gateway # 应用名称
  cloud:
    nacos:
      discovery:
        username: nacos
        password: nacos
        # Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
        server-addr: 127.0.0.1:8848
        namespace: 484de66d-d85c-4f8c-92e5-dfc4c3e03373 # 注册到 nacos 的指定 namespace,默认为 public
    # gateway 配置
    gateway:
      discovery:
        locator:
          enabled: true # gateway可以从nacos发现微服务
          lower-case-service-id: true #服务名称支持小写
踩坑1

同时使用spring-boot-starter-web和spring-cloud-starter-gateway会冲突,所以

删除spring-boot-starter-web

踩坑2

使用GateWay访问project-a服务报404,我这比较奇葩了,由于spring-cloud-starter-gateway没有写版本,所以spring-cloud-starter-gateway没有下载下来

添加版本重新下载好了就没有问题了

踩坑3

刚开始Gateway配置文件是这样写的,我访问project-a接口的时候没有问题,访问project-b接口又报404,后面找到原因了,因为转发的时候project-a和project-b的接口路径都是/api/** 开头的,所以Gateway转发的时候不知道转发那个项目

代码语言:javascript
复制
@Configuration
public class GateWayConfig {

    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
                .route("project-a_route", r -> r.path("/api/**")
                
                        .uri("lb://project-a"))

                .route("project-b_route", r -> r.path("/api/**").
                        .uri("lb://project-b"))
                .build();
    }
}

修改为

代码语言:javascript
复制
@Configuration
public class GateWayConfig {

    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
                .route("project-a_route", r -> r.path("/projectA/api/**")
                        .filters(f -> f.rewritePath("/projectA/(?<remaining>.*)", "/${remaining}"))
                        .uri("lb://project-a"))

                .route("project-b_route", r -> r.path("/projectB/api/**").
                        filters(f -> f.rewritePath("/projectB/(?<remaining>.*)", "/${remaining}"))
                        .uri("lb://project-b"))
                .build();
    }
}

加上一个项目前缀,然后再过滤掉前缀

使用Gateway访问:

http://localhost:9092/projectA/api/xxx/xxxx

http://localhost:9092/projectB/api/xxx/xxxx

这样就能正常转发了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

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