欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

springcloud gateway无法路由问题的解决,

来源: javaer 分享于  点击 33636 次 点评:258

springcloud gateway无法路由问题的解决,


目录
  • 前言
  • 描述问题
  • 分析原因
    • springcloud gateway 的pom排除web
  • 解决思路
    • 独立的springcloud gateway
  • 总结

    前言

    昨天小伙伴问我springcloud gateway 无法路由转发的问题,现在记录一下

    现在企业微服务架构基本上都是用springcloud体系了,在国内基本上新项目都用springcloud alibaba,而且基本上都是所有服务聚合在一个父项目中。

    springcloud gateway可以实现路由负载均衡等等功能,但是应用过程中,会有一些坑。

    描述问题

    配置的没问题如下:

    server:
      port: 9999
    spring:
      application:
        name: gateway-server
      cloud:
        nacos:
          discovery:
            server-addr: 192.168.229.7:8848
        gateway:
          discovery:
            locator:
              enabled: true ##开启了会自动匹配路由规则
          routes: ##配置了手动路由规则,上面的自动开启失效
            - id: nacos-provider
              uri: lb://nacos-provider
              predicates:
                - Path=/mmm/**

    provider代码:

    @RestController
    @RequestMapping("/mmm")
    public class MMMController {
        @Value("${server.port}")
        private String port;
        @GetMapping("/get")
        public String get(){
            return port;
        }
    }

    但是测试始终无效:

    分析原因

    springcloud项目基本上都聚合到一个父项目中,里面各种子模块如provider、consumer、sentinel、gateway…,其他模块都没问题,但是springcloud gateway有点特殊,因为它依赖了web webflux ,就会有冲突,所以基本上在pom中就要排除web,这样就不会应该父项目依赖了web导致冲突了

    springcloud gateway 的pom排除web

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
        <exclusions>
            <exclusion>
    			<groupId>org.springframework.boot</groupId>
            	<artifactId>spring-boot-starter-web</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    启动会成功,但是项目会有报错提示:

    **********************************************************

    Spring MVC found on classpath, which is incompatible with Spring Cloud Gateway at this time. Please remove spring-boot-starter-web dependency.

    **********************************************************

    最后路由不到指定url。

    Whitelabel Error Page
    This application has no explicit mapping for /error, so you are seeing this as a fallback.

    Fri Mar 17 16:34:53 CST 2023
    There was an unexpected error (type=Not Found, status=404).
    No message available

    解决思路

    如何解决呢?我的意见是把springcloud gateway项目独立出来,不要聚合到父项目中,这样就不会有web以来冲突了

    独立的springcloud gateway

    pom文件如下:

    <?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 http://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.13.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.mmm.springcloud.study</groupId>
        <artifactId>spring-cloud-gateway-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
        <properties>
            <maven.compiler.source>8</maven.compiler.source>
            <maven.compiler.target>8</maven.compiler.target>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
                <version>2.2.5.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-gateway</artifactId>
                <version>2.2.3.RELEASE</version>
            </dependency>
        </dependencies>
    </project>

    因为没有聚合到父项目中,所以不需要额外提出web,启动后直接访问,成功!

    总结

    到此这篇关于springcloud gateway无法路由问题解决的文章就介绍到这了,更多相关springcloud gateway无法路由内容请搜索3672js教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持3672js教程!

    您可能感兴趣的文章:
    • springcloud gateway如何实现路由和负载均衡
    • SpringCloud Gateway 路由配置定位原理分析
    • SpringCloud Gateway动态路由配置详解
    • SpringCloud Gateway的路由,过滤器和限流解读
    • SpringCloud Gateway路由组件详解
    相关栏目:

    用户点评