Zuul路由、实现过程和测试

本文介绍了Zuul作为微服务的边缘服务和API网关的角色,包括路由转发和过滤器功能。通过集成Eureka实现服务发现,详细讲述了配置步骤,并提供了示例代码。通过配置路由规则,使得可以自定义访问路径,避免直接使用微服务名。此外,还讨论了如何禁用微服务名访问和添加统一接口前缀。最后,介绍了Zuul的通配符规则,用于灵活匹配URL路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Zuul的概念和作用:

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

其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础,过滤功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础;

Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的信息,也即以后的访问微服务都是通过Zuul跳转后获得。

路由实现过程:

第一步: 项目加入依赖:

<!--spring-cloud-starter-netflix-eureka-client-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

<!-- spring-cloud-starter-netflix-zuul -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>

第二步: 配置文件(由于Zuul最终也会注册进eureka,所以也需要配置eureka)

server.port=80

#是eureka注册中心首页的Application这一栏
spring.application.name=34-springcloud-service-zuul

#每间隔2s,向服务端发送一次心跳,证明自己依然"存活"
eureka.instance.lease-renewal-interval-in-seconds=2
#告诉服务端,如果我10s之内没有给你发心跳,就代表我故障了,将我踢出掉
eureka.instance.lease-expiration-duration-in-seconds=10
#告诉服务端,服务实例以IP作为链接,而不是取机器名
eureka.instance.prefer-ip-address=true
#告诉服务端,服务实例的id,id必须要唯一,是eureka注册中心首页的Status这一栏
eureka.instance.instance-id=34-springcloud-service-zuul

#eureka注册中心的连接地址
eureka.client.service-url.defaultZone=http://192.168.10.128:8761/eureka,http://192.168.10.128:8762/eureka,http://192.168.10.128:8763/eureka

第三步: 启动类上配置注解

@EnableZuulProxy
@SpringBootApplication
public class ZuulApplication {
    public static void main(String[] args) {
        SpringApplication.run(ZuulApplication.class, args);
    }
}

通过zuul进行测试

启动项目后进行访问测试:

路径:

http://localhost/34-springcloud-service-portal/cloud/goodsFeign

其中:

http://localhost:80/
这个是zuul本身的项目路径

34-springcloud-service-portal
这个是要调用的项目名称(eureka的唯一id,注册到服务中心的id)

/cloud/goodsFeign
这个是被调用的contrller上的接口路径;

路径配置问题

在实际开发当中我们肯定不会通过微服务名去调用,比如我要调用消费者可能只要一个/cloud/goodsFeign就好了,而不是/34-springcloud-service-portal/cloud/goodsFeign加入以下配置即可:

#配置路由规则
zuul.routes.portal.service-id=34-springcloud-service-portal
zuul.routes.portal.path=/portal/**

然后:http://localhost/portal/cloud/goodsFeignHystrix 即可访问到。

/ **代表是所有(多个)层级 /cloud/goodsFeignHystrix
/ * 是代表一层;

如果是/ * 的话 /api/goods 就不会被路由;

禁止通过微服务名称访问

此时我们能通过自定义的规则进行访问,但是我们现在依然能用之前的微服务名调用,这是不合理的,第一是有多重地址了, 第二一般微服务名这种最好不要暴露在外,所以我们一般会禁用微服务名方式调用。

加入配置:

zuul.ignored-services=34-springcloud-service-portal

这里能发现我们不能通过微服务名来调用了, 不过这个配置如果一个一个通过微服务名来配置难免有点复杂,所以一般这样配置来禁用所有:

zuul.ignored-services=*

对访问路径加统一规范

可能有时候我们的接口调用需要一定的规范,比如调用微服务的API URL前缀需要加上/api 对于这种情况,zuul也考虑到了并给出了解决方案:

zuul.prefix=/api

比如:http://localhost/api/portal/cloud/goodsFeignHystrix

通配符

通配符含义举例说明
匹配任意单个字符/34-springcloud-service-feign/?匹配/34-springcloud-service-feign/a, /34-springcloud-service-feign/b, /34-springcloud-service-feign/c 等
*匹配任意数量的字符/34-springcloud-service-feign/*匹配 /34-springcloud-service-feign/aaa, /34-springcloud-service-feign/bbb, /34-springcloud-service-feign/ccc 等, 无法匹配 /34-springcloud-service-feign/a/b/c
**匹配任意数量的字符/34-springcloud-service-feign/**匹配 /34-springcloud-service-feign/aaa, /34-springcloud-service-feign/bbb, /34-springcloud-service-feign/ccc 等, 也可以匹配 /34-springcloud-service-feign/a/b/c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值