标签:
一、API Gateway简介参看:
二、zuul简介【路由器和过滤器:Zuul】在微处事架构的构成部分进行路由。例如,/可能映射到您的Web应用措施,/ api / users映射到用户处事,并且/ api / shop映射到商店处事。Zuul是Netflix供给的基于JVM的路由器和处事器端负载均衡器。
Netflix使用Zuul进行以下操纵:
认证、洞察、压力测试、金丝雀测试、动态路由、处事迁移、加载脱落、安适、静态响应措置惩罚惩罚、主动/主动流量打点
Zuul的法则引擎允许使用根基上任何JVM语言编写法则和过滤器,并撑持Java和Groovy。
注意1:配置属性zuul.max.host.connections已被两个新属性zuul.host.maxTotalConnections和zuul.host.maxPerRouteConnections代替,默认值分袂为200和20。
注意2:所有路由的默认Hystrix断绝模式(ExecutionIsolationStrategy)为SEMAPHORE。如果此断绝模式为首选,则zuul.ribbonIsolationStrategy可以变动为THREAD。
2.1、嵌入式Zuul反向代办代理Spring Cloud已经创建了一个嵌入式Zuul代办代理来缓解UI应用措施但愿将挪用代办代理挪用到一个或多个后端处事的非每每见的用例的开发。此特性对付用户界面代办代理其所需的后端处事非常有用,从而制止需要独立打点所有后真个CORS和身份验证问题。
要启用它,使用@EnableZuulProxy注释一个Spring Boot主类,,并且将本地挪用转发给相应的处事。凭据惯例,具有ID“用户”的处事将接收来自位于/ users的代办代理的请求(剥离了前缀)。代办代理使用成果区找到要通过Ribbon转发的实例,并且所有请求都在hystrix命令中执行,因此故障将显示在Hystrix指标中,一旦断路器打开,代办代理不会测验考试联系处事。
注意:Zuul启动器不包罗发明客户端,所以对付基于处事ID的路由,您需要在类路径*给此中的一个(例如,Eureka是一种选择)。
2.1.1、使用 pom引用<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>
启动类增加@EnableZuulProxy@SpringBootApplication @EnableZuulProxy public class ZuulApplication { public static void main(String[] args) { SpringApplication.run(ZuulApplication.class, args); } }
配置文件spring: application: name: microservice-gateway-zuul server: port: 8040 eureka: client: serviceUrl: defaultZone: http://user:[email protected]:8761/eureka/ instance: prefer-ip-address: true
开始启动Eureka项目,在启动user-provider项目,在启动Zuul项目
通过zuul访谒::8040/microservice-provider-user/sample/1
2.1.2、路由法则 1、简化微处事名称将microservice-provider-user路由成user
zuul: routes: microservice-provider-user: /user/**
2、只想反向代办代理 microservice-provider-user用户处事,其他不代办代理zuul: ignoredServices: ‘*‘ routes: users: /myusers/**
或者忽略具体的,使用“,”分隔断绝分手
3、为了更好地控制路由,您可以独立指定路径和serviceId:zuul: routes: user-controller: #名称任意 path: /user/** serviceId: microservice-provider-user
这意味着http挪用“/ myusers”被转发到“users_service”处事。路由必需有一个可以指定为ant样式的“路径”,因此“/myusers/*”只匹配一个级别,但“/myusers/**”分条理匹配。
4、可以将后真个位置指定为“serviceId”(对付来自发明的处事)或“url”(对付物理位置)zuul: routes: user-controller: #名称任意 path: /user/** url: :7900/
5、负载均衡这些简单的url路由不会作为HystrixCommand执行,也不会使用Ribbon来负载多个URL。
要领一、为了到达这个目的,你可以用一个静态的处事器列表来指定一个serviceId: