SpringCloud之zuul

后台的微服务和客户端之间都有一个类似于酒店的前台,叫做网关。网关一般有以下作用:
1、统一登录认证,由网关来进行身份认证,调用每个微服务时就不用各自认证了。
2、解决跨越问题,微服务一般是部署在内网中。客户端调用时存在跨域。
3、动态路由和负载均衡,根据请求路径动态分发到不同服务。也可根据服务名进行负载均衡。
4、限流。每个服务自定义限流。
5、监控。网关是微服务的入口,可以监控请求的流量等。

 
 

Zuul是Netflix开源的微服务网关,核心是一系列过滤器。这些过滤器可以完成以下功能。

  1. 是所有微服务入口,进行分发。
  2. 身份认证与安全。识别合法的请求,拦截不合法的请求。
  3. 监控。在入口处监控,更全面。
  4. 动态路由。动态将请求分发到不同的后端集群。
  5. 压力测试。可以逐渐增加对后端服务的流量,进行测试。
  6. 负载均衡。也是用ribbon。
  7. 限流。比如我每秒只要1000次,10001次就不让访问了。
  8. 服务熔断

 
 

新建名为ZuulServer的模块,SpringCloud版本选择Hoxton.SR9,java版本选择java8,SpringBoot版本选择2.3.2.RELEASE。

添加依赖:

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


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

application.properties配置:

eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
spring.application.name=zuulserver
server.port=7000

启动类加@EnableZuulProxy注解。

 

访问http://localhost:7000/consumer/helloByFeign,看到hello,张三,8002。启动Producer模块端口为8000的服务,在访问可以看到负载均衡已生效。默认是使用ribbon做负载均衡。

负载均衡

修改负载均衡策略,在application.properties配置:

producer.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

多访问http://localhost:7000/producer/hello?name=张三几次,可看到负载均衡策略已生效。

 
 

通过服务名配置虚拟主机名

zuul.routes.consumer=/test/**

访问http://localhost:7000/test/helloByFeign看到已生效。

 

配置自定义映射:

zuul.routes.search.path=/search/**
zuul.routes.search.url=http://www.baidu.com

访问http://localhost:7000/search/,可以看到跳转到了百度首页。

 

忽略微服务

zuul.ignored-services=producer

访问http://localhost:7000/producer/hello?name=张三,看到报错。

加前缀

zuul.prefix=/api/v1

访问http://localhost:7000/consumer/helloByFeign报错,访问http://localhost:7000/api/v1/consumer/helloByFeign成功。

posted @ 2023-04-02 18:45  shigp1  阅读(63)  评论(0)    收藏  举报