路由(Routing)是微服务体系结构的一个组成部分。
例如,/可以映射到web应用程序,/api/users映射到用户服务,/api/shop映射到商店服务。
Zuul是Netflix基于jvm的路由器和服务器端负载平衡器。(Ribbon是客户端负载均衡器)
Netflix使用Zuul做如下用途:
身份验证(Authentication)、Insight、压力测试(Authentication)、金丝雀测试(Canary Testing)、动态路由(Dynamic Routing)、服务迁移(Service Migration)、负载(Load Shedding)、安全(Security)、静态响应处理(Static Response handling)、流量管理(Active/Active traffic management)
配置属性zuul.max.host 连接已被两个新属性zuul.host所取代。
maxTotalConnections zuul.host 、maxPerRouteConnections,默认值分别为200和20。
所有路由的默认Hystrix隔离模式(ExecutionIsolationStrategy)是SEMAPHORE(信号量)。
zuul.ribbonIsolationStrategy也可以更改为THREAD。
Zuul starter不包含发现客户端(discovery client),因此,对于基于Service ID的路由,还需要在类路径中提供其中一个(Eureka是一种选择)。
Zuul所需依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
Zuul所需注解:
package com.itmuch.cloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
@SpringBootApplication
@EnableZuulProxy
public class ZuulApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulApplication.class, args);
}
}
Zuul所需配置:
spring:
application:
name: microservice-gateway-zuul
server:
port: 8040
eureka:
client:
service-url:
defaultZone: http://user:password123@localhost:8761/eureka
instance:
prefer-ip-address: true
zuul:
ignoredServices: microservice-consumer-movie-ribbon-with-hystrix
routes:
microservice-provider-user: /user/**
例子,依次启动 1-注册中心Eureka服务,2-Zuul网关服务,3-服务提供者:user服务,4-服务消费者:movie服务
测试点:Zuul反向代理 user服务,
Zuul反向代理movie服务
Zuul只反向代理user服务
访问Eureka注册中心 http://localhost:8761/ 如下
测试网关Zuul反向代理用户微服务,
访问 http://localhost:8040/user/simple/1(即网关IP:网关PORT/反向代理的微服务ServiceID/接口路径),结果如下:
成功!