SpringCloud 服务网关路由规则的坑及解决

 更新时间:2021年07月15日 15:10:31   作者:浅然言而信  
这篇文章主要介绍了SpringCloud 服务网关路由规则的坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

一、场景简述

笔者最近用到SpringCloud 服务网关的时候,进行服务网关的路由测试,发现无法路由自己设置的规则,测试的时候如下

通过错误排查发现,原来是路由规则写错了!

路由规则如下(错误)

#端口
server:
  port: 8080
spring:
  #该配置文件中的配置,对应的服务名称是wc-gateway
  application:
    name: wc-gateway
  profiles:
    active: dev
#服务网关配置
zuul:
  host:
    connect-timeout-millis: 60000
    socket-timeout-millis: 60000
    #路由规则
    routes:
      api:
        path: /api/user/**
        serviceId: wc-client-user

二、解决方案

只需要将routes及以下的属性左移,与host相等级别即可

修改后的路由规则

#端口
server:
  port: 8080
spring:
  #该配置文件中的配置,对应的服务名称是wc-gateway
  application:
    name: wc-gateway
  profiles:
    active: dev
#服务网关配置
zuul:
  host:
    connect-timeout-millis: 60000
    socket-timeout-millis: 60000
  #路由规则
  routes:
    api:
      path: /api/user/**
      serviceId: wc-client-user

好了,问题解决,我们重启应用测试,测试结果和预期一样。

SpringCloud 进阶之Zuul(路由网关)

1. Zuul(路由网关)

Zuul 包含了对请求的路由和过滤两个最主要的功能;

路由功能:负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础;

过滤功能:负责对请求的处理过程进行干预,是实现请求校验,服务聚合等功能的基础;

Zuul 服务最终还是会注册进Eureka;

1.1 路由基本配置

新建 microservicecloud-zuul-gateway-9527

// pom.xml
<!-- zuul 路由网关 -->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
// application.yml
server:
  port: 9527
spring:
  application:
    name: microservicecloud-zuul-gateway
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
instance:
  instance-id: gateway-9527.com
  prefer-ip-address: true
  info:
    app.name: noodles-microcloud
    company.name: www.google.com
    build.artifactId: $project.artifactId$
    build.version: $project.version$
// hosts 修改: 127.0.0.1   myzuul.com
// 主启动类
@SpringBootApplication
@EnableZuulProxy
public class Zuul_9527_StartSpringCloudApp {
	public static void main(String[] args) {
		SpringApplication.run(Zuul_9527_StartSpringCloudApp.class, args);
	}
}
// 启动
// 三个Eureka集群
// microservicecloud-provider-dept-8001
// 路由
// 测试访问:
// 不用路由: http://localhost:8001/dept/get/1
// 使用路由: http://myzuul.com:9527/microservicecloud-dept/dept/get/1

1.2 Zuul 路由访问映射规则

// microservicecloud-zuul-gateway-9527
// 修改 application.yml
zuul:
  ignored-services: microservicecloud-dept      # 将原有路由关闭
  routes:
    prefix: /test       # 设置统一公共前缀, 访问地址:http://myzuul.com:9527/test/mydept/dept/get/1
    mydept.serviceId: microservicecloud-dept
    mydept.path: /mydept/**
// 修改之前,访问地址: http://myzuul.com:9527/microservicecloud-dept/dept/get/1
// 修改之后,访问地址: http://myzuul.com:9527/mydept/dept/get/1

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java多线程中Lock的使用小结

    Java多线程中Lock的使用小结

    jdk1.5 以后,提供了各种锁,本文主要介绍了Java多线程中Lock的使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • 彻底理解Spring注解@Autowired实现原理

    彻底理解Spring注解@Autowired实现原理

    这篇文章主要为大家详细的介绍了Spring注解@Autowired实现的原理,缜密的逻辑分析,实践应用示例操作说明,让大家彻底的理解Spring注解@Autowired背后实现原理
    2022-03-03
  • SpringBoot LiteFlow引擎框架使用原理解析

    SpringBoot LiteFlow引擎框架使用原理解析

    LiteFlow是一个轻量且强大的国产规则引擎框架,可用于复杂的组件化业务的编排领域,本文给大家介绍SpringBoot LiteFlow引擎框架的相关操作,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • Java 图文并茂讲解主方法中的String[] args参数作用

    Java 图文并茂讲解主方法中的String[] args参数作用

    很多老铁不清楚JAVA主方法中main()里面的的参数是什么意思,以及有什么作用,接下来给大家用最通俗易懂的话来讲解,还不清楚的朋友来看看吧
    2022-04-04
  • 了解Java虚拟机JVM的基本结构及JVM的内存溢出方式

    了解Java虚拟机JVM的基本结构及JVM的内存溢出方式

    这篇文章主要介绍了Java虚拟机JVM的基本结构及JVM的内存溢出方式,涉及到Java内存分配相关方面的知识,需要的朋友可以参考下
    2016-01-01
  • App登陆java后台处理和用户权限验证

    App登陆java后台处理和用户权限验证

    这篇文章主要为大家详细介绍了App登陆java后台处理和用户权限验证,感兴趣的朋友可以参考一下
    2016-06-06
  • 2个java希尔排序示例

    2个java希尔排序示例

    java希尔排序示例,希尔排序是插入排序的一种类型,也可以用一个形象的叫法缩小增量法,需要的朋友可以参考下
    2014-05-05
  • Map映射LinkedHashSet与LinkedHashMap应用解析

    Map映射LinkedHashSet与LinkedHashMap应用解析

    这篇文章主要为大家介绍了Map映射LinkedHashSet与LinkedHashMap的应用解析,有需要的朋友可以借鉴参考下,希望能够有所帮助祝大家多多进步
    2022-03-03
  • Java绘制迷宫动画并显示的示例代码

    Java绘制迷宫动画并显示的示例代码

    这篇文章主要为大家详细介绍了如何利用Java语言实现绘制迷宫动画并显示,文中的示例代码讲解详细,对我们学习Java有一定帮助,需要的可以参考一下
    2022-08-08
  • MyBatis-Plus中如何使用ResultMap的方法示例

    MyBatis-Plus中如何使用ResultMap的方法示例

    本文主要介绍了MyBatis-Plus中如何使用ResultMap,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11

最新评论