Spring Cloud(八):服务转发路由zuul

一:概念
微服务场景下,每一个微服务对外暴露了一组细粒度的服务。客户端的请求可能会涉及到一串的服务调用,如果将这些微服务都暴露给客户端,那么会增加客户端代码的复杂度。将细粒度的服务组合起来提供一个粗粒度的服务,所有请求都导入一个统一的入口,那么整个服务只需要暴露一个api,对外屏蔽了服务端的实现细节,也减少了客户端与服务器的网络调用次数。这就是api gateway。有了api gateway之后,一些与业务关系并不大的通用处理逻辑可以从api gateway中剥离出来,api gateway仅仅负责服务的编排与结果的组装。
此功能对于用户界面对其所需的后端服务进行代理是有用的,避免了对所有后端独立管理CORS和验证问题的需求。

二:工作原理介绍
要启用它,使用@EnableZuulProxy注释Spring Boot主类,并将本地调用转发到相应的服务。按照惯例,具有ID“用户”的服务将接收来自位于/users(具有前缀stripped)的代理的请求。代理使用Ribbon来定位一个通过发现转发的实例,并且所有请求都以 hystrix命令执行,所以故障将显示在Hystrix指标中,一旦电路打开,代理将不会尝试联系服务。

2.1:忽略服务
要跳过自动添加的服务,请将zuul.ignored-services设置为服务标识模式列表。
zuul:
ignoredServices: ‘*’
routes:
users: /myusers/**

2.2:映射
映射:
1.url映射
2.serviceId映射

zuul:
routes:
api-node1:
path: /ribbon/** #指定路径
serviceId: spring-cloud-ribbon-consumer #指定服务
api-node2:
path: /feign/**
url: http://localhost:8766 #指定URL
2.3: Cookie与头信息
默认情况下,Zuul在请求路由时,会过滤HTTP请求头信息中的一些敏感信息,默认的敏感头信息通过zuul.sensitiveHeaders定义,包括Cookie、Set-Cookie、Authorization。如果您要将Cookie或授权标头传递到后端,必须设置sensitiveHeaders为空

2.4:坑
如果你使用 @EnableZuulProxy , 你可以使用代理路径上传文件, 它能够一直正常工作只要小文件. 对于大文件有可选的路径”/zuul/“绕过Spring DispatcherServlet (避免处理multipart). 比如对于 zuul.routes.customers=/customers/* , 你可以使用 “/zuul/customers/*” 去上传大文件. Servlet路径通过 zuul.servletPath 指定. 如果使用Ribbon负载均衡器的代理路由, 在 处理非常大的文件时, 仍然需要提高超时配置.

三:项目的构建
3.1:pom.xml配置

 
    org.springframework.boot
    spring-boot-starter-parent
    1.5.6.RELEASE
     



    UTF-8
    UTF-8
    1.8
    Dalston.SR2




    
    
        org.springframework.cloud
        spring-cloud-starter-zuul
    

    
    
        org.springframework.cloud
        spring-cloud-starter-eureka
    

    
    
        org.springframework.boot
        spring-boot-starter-web
    

    
        org.springframework.boot
        spring-boot-starter-thymeleaf
    

    
        org.springframework.boot
        spring-boot-starter-test
        test
    




    
        
            org.springframework.cloud
            spring-cloud-dependencies
            ${spring-cloud.version}
            pom
            import
        
    



    
        
            org.springframework.boot
            spring-boot-maven-plugin
        
    



    
        spring-milestones
        Spring Milestones
        https://repo.spring.io/milestone
        
            false
        
    

3.2:application.yml

server:
    port: 8767
spring:
  application:
    name: zuulServer

#单实例路由
zuul:
  routes:
    api-node1:
      path: /ribbon/** 
      serviceId: spring-cloud-ribbon-consumer #指定服务
    api-node2:
      path: /feign/**
      url: http://localhost:8766#指定路径

3.3:程序入口

@EnableZuulProxy
@EnableEurekaClient
@SpringBootApplication
public class ZuulServiceApplication {

public static void main(String[] args) {
    SpringApplication.run(ZuulServiceApplication.class, args);
    }
}

四:运行
结合之前项目的EurekaServer,Ribbon,Feign项目测试服务的转发。

代码地址:https://github.com/rubenYuan/Spring-Cloud-Samples
PPT:http://download.csdn.net/download/ruben95001/9974839

上一篇:链路追踪Sleuth-Zipkin与Mysql数据的持久化

你可能感兴趣的:(SpringCloud)