c# 微服务学习_学习微服务网关zuul,看这篇就够了

本文介绍了C#环境下使用Zuul作为微服务网关的详细教程,涵盖Zuul的功能、配置、路由映射、过滤器、限流、鉴权、跨域、超时设置、服务熔断、重试机制和高可用性等关键点,帮助开发者深入理解并实现在微服务架构中的应用。
摘要由CSDN通过智能技术生成

戳蓝字“CSDN云计算”关注我们哦!

作者:爱撒谎的男孩
原文:https://chenjiabing666.github.io/2018/12/25/zuul%E6%9C%8D%E5%8A%A1%E7%BD%91%E5%85%B3/

本文系读者投稿,已获作者原创授权。

如果你有好文章,可以戳这里投稿。

Zuul

简介

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

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

代理+路由+过滤三大功能。

使用

需要和Eureka客户端结合使用,依赖如下:

1

2

3

4

5

6

7

8

9

10

<dependency>

<groupId>org.springframework.cloudgroupId>

<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>

dependency>

<dependency>

<groupId>org.springframework.cloudgroupId>

<artifactId>spring-cloud-starter-netflix-zuulartifactId>

dependency>

添加配置,将其注册到eureka中,如下:

1

2

3

4

5

6

7

8

9

10

11

12

server:

 port: 9001

eureka:

 client:

   serviceUrl:

     defaultZone: http://localhost:7001/eureka  # eureka的暴露地址,直接注册

 instance:

   instance-id: zuul.com

   prefer-ip-address: true

spring:

 application:

   name: zuul   #应用的名称,在同一个eureka中必须不重复

在主启动类上添加@EnableZuulProxy这个注解,如下:

1

2

3

4

@SpringBootApplication

@EnableEurekaClient  //开启eurkea客户端

@EnableZuulProxy   //开启zuul

public class DeptGetWayZuul9001Application {

启动即可,在eureka中看到注册进入即可

之后只需要通过zuul访问其他的微服务提供者即可,比如服务提供者的实例名称为dept-provider,那么通过zuul访问的路径为

http://localhost:9001/dept-provider/dept/1

路由映射规则

代理名称

之前的配置访问的还是需要带上微服务的实例名称,但是我们不想微服务的实例名称暴露,那么此时就需要使用代理名称替代,配置如下:

  • 使用ignored-services忽略真实的服务名称访问,可以同时指定多个,其中服务名称必须和服务配置文件中一样。

  • 在routes下指定多个路由映射规则。

1

2

3

4

5

6

7

8

9

10

11

12

zuul:

# 忽略真实的服务名称实例访问,是一个Set集合,可以指定多个,取消全部使用 "*"即可

 ignored-services:

 - order-provider

#routes下面指定代理规则,可以同时指定多个

 routes:

#指定第一个规则,这里的名称任意

   api-order:

#指定的实例名称

     serviceId: order-provider

#指定可以访问的路由

     path: /api-order/**

按照上面的配置完成之后就可以直接使用映射的路由访问即可,如:

http://zuul.com:9001/api-order/order/1

设置统一前缀

我们可以在所有的访问uri前面加上统一的前缀,配置如下:

使用zuul.prefix加上统一的前缀即可

1

2

3

4

5

6

7

8

9

10

11

12

13

14

zuul:

#加上统一的前缀,那么访问的时候一定要加上这个前缀才可以访问到

 prefix: /chenjiabing

# 忽略真实的服务名称实例访问,是一个Set集合,可以指定多个,取消全部使用 "*"即可

 ignored-services:

 - order-provider

#routes下面指定代理规则,可以同时指定多个

 routes:

#指定第一个规则,这里的名称任意

   api-dept:

#指定的实例名称

     serviceId: order-provider

#指定可以访问的路由

     path: /api-order/**

通过上面的配置,此时的访问路径变成

http://zuul.com:9001/chenjiabing/api-order/order/1

某个uri取消路由

使用zuul.ignored-services是忽略一个或者多个微服务的全部接口,但是如果我们可以更细化

如果我们需要隐藏一些敏感的接口不给访问,我们可以在yml文件中配置,如下:

1

2

3

4

zuul:

 ignored-patterns:

 - /api-order/order/list   # 取消指定的一个

 - /api-order/order/**     # 使用通配符去掉order下的全部接口

传递敏感头信息

默认zuul是不能传递头信息的,比如cookie,默认的设置了三个字段,如下:

1

2

private Set sensitiveHeaders = new LinkedHashSet<>(

Arrays.asList("Cookie", "Set-Cookie", "Authorization"));

如果我们想让它不过滤,只需要将其设置为空,或者不配置其他的,如下:

  • sensitive-headers这个值设置为空即可

  • 这个配置只是针对order-provider这个微服务起作用

1

2

3

4

5

6

7

8

9

zuul:

 routes:

#指定第一个规则,这里的名称任意

   api-order:

#指定的实例名称

     serviceId: order-provider

#指定可以访问的路由

     path: /api-order/**

     sensitive-headers:   # 设置为空即可,那么就可以传递敏感头信息了

上面的配置是针对单个服务的设置,我们也可以配置针对所有的服务,如下:

1

2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值