• Zuul


    不同的微服务一般有不同的网络地址,而外部的客户端可能需要调用多个服务的接口才能完成一个业务需求。

    如果客户端直接和微服务进行通信,会存在一下问题:

    1. 客户端会多次请求不同微服务,增加客户端的复杂性
    2. 存在跨域请求,在一定场景下处理相对复杂
    3. 认证复杂,每一个服务都需要独立认证
    4. 难以重构,随着项目的迭代,可能需要重新划分微服务,如果客户端直接和微服务通信,那么重构会难以实施
    5. 某些微服务可能使用了其他协议,直接访问有一定困难

    网关的作用

    Zuul

    ZuulNetflix开源的微服务网关,他可以和Eureka,Ribbon,Hystrix等组件配合使用。

    注:Eureka不是必须的。在没有注册中心的情况下,也是可以进行zuul使用的

    注: 默认情况下:Zuul代理所有注册到EurekaServer的微服务
    路由规则:http://Zuul-host:Zuul-port/微服务实例名(serverId)/**转发至serviceId对应的微服务

    Zuul组件的核心是一系列的过滤器,这些过滤器可以完成以下功能:
    
        1. 身份认证和安全: 识别每一个资源的验证要求,并拒绝那些不符的请求
    
        2. 审查与监控:在边缘位置追踪有意义的数据和统计结果,从而带来精确的生成视图
    
        3. 动态路由:动态将请求路由到不同后端集群
    
        4. 压力测试:逐渐增加指向集群的流量,以了解性能
    
        5. 负载分配:为每一种负载类型分配对应容量,并弃用超出限定值的请求
    
        6. 静态响应处理:边缘位置进行响应,避免转发到内部集群
    
        7. 多区域弹性:跨域AWS Region进行请求路由,旨在实现ELB(ElasticLoad Balancing)使用多样化
    

    Spring Cloud对Zuul进行了整合和增强

    依赖
    <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.yml
        server:
          port: 10000
        spring:
          application:
            name: tensquare-manager        #指定服务名
        eureka:
          client:
            service-url:
              defaultZone: localhost:6868/eureka/
            instance:
              prefer-ip-address: true        #启用ip配置,这样在注册中心列表中看见的是以ip+端口呈现的
        zuul:
          routes:
            tensquare-gathering:        #路由到微服务
              path: /gathering/**        #配置请求URL的请求规则
              serviceId: tensquare-gathering        #指定Eureka注册中心中的服务id,将path: /gathering/**映射到serviceId: tensquare-gathering/**
              url: http://localhost:8000/        #将path: /gathering/**映射到http://localhost:8000/**
          ignored-services: product-provider,product-consumer        #忽略某些微服务
          ignoredPatterns: /**/user/**        #忽略所有包含/user/的地址请求
    
    
    启动类
        @SpringBootApplication
        @EnableZuulProxy
        @EnableEurekaClient
        public class ManagerApplication {
            public static void main(String[] args) {
                SpringApplication.run(ManagerApplication.class, args);
            }
        }
    
  • 相关阅读:
    C++编程开发学习的50条建议(转)
    编程思想:我现在是这样编程的(转)
    Linux系统编程@多线程与多进程GDB调试
    字符串分割函数 STRTOK & STRTOK_R (转)
    C语言指针与数组的定义与声明易错分析
    C语言 a和&a的区别
    C语言二重指针与malloc
    【C语言入门】C语言的组成结构(基础完整篇)!
    程序员吐槽女友败家:开酒店必须400元起步,工资却不到自己的一半!
    怎样才能和编程语言对上眼?你需要做些准备以及...
  • 原文地址:https://www.cnblogs.com/loveer/p/11439476.html
Copyright © 2020-2023  润新知