Warning: mysqli_query(): (HY000/1021): Disk full (/tmp/#sql_51b_2.MAI); waiting for someone to free some space... (errno: 28 "No space left on device") in /opt/lampp/htdocs/wordpress/wp-includes/wp-db.php on line 2033
SpringCloud之zuul()-spring – 知识波
       

SpringCloud之zuul()

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

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

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

新建名为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
————————

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

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

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

新建名为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