路由在微服务体系结构的一个组成部分。例如,/可以映射到web应用程序,/api/users映射到用户服务,并将/api/shop映射到商店服务。(这几个映射可以说是通过Zuul网关将服务映射到不同的服务区处理)
Zuul是netflix的基于JVM的路由器和服务器负载均衡器。
Netflix使用Zuul可以进行以下操作:
认证,洞察,压力测试,金丝雀测试,动态路由,服务迁移,负载脱落,安全,静态响应处理,主动/主动流量管理。
Zuul的规则引擎允许基本上写任何JVM语言编写规则和过滤器,内置Java和Groovy。
Zuul启动器不包括发现客户端,因此对于基于服务ID的路由,您还需要在类路径中提供其中一个路由(例如Eureka)
8.1 Zuul简单代码示例
8.1.1 pom.xml
//添加spring-cloud-starter-zuul依赖
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>microservice-gateway-zuul</artifactId>
<packaging>jar</packaging>
<parent>
<groupId>com.kevin.cloud</groupId>
<artifactId>microservice-spring-cloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
<version>1.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.2.1.RELEASE</version>
</dependency>
</dependencies>
</project>
8.1.2 application.yml
spring:
application:
name: microservice-gateway-zuul
server:
port: 8040 #指定服务端口
eureka:
client:
service-url:
defaultZone: http://kevin:123456@localhost:8761/eureka
#注册IP
instance:
prefer-ip-address: true
#该配置让路由可以将服务的名称自定义
zuul:
routes:
microservice-provider-user: /user/**
8.1.3 GatewayZuulApplication.java
package com.kevin.cloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
/**
*
* @title EurekaServer注册中心
* @description
* @author caonanqing
* @createDate 2018/11/7
* @version 1.0
*/
@SpringBootApplication //设为springboot
@EnableZuulProxy //开启zuul功能
public class GatewayZuulApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayZuulApplication.class, args);
System.out.println("Zuul启动...");
}
}
8.1.4访问示例
启动微服务
1.启动EurekaServer(注册中心)
2.启动microservice-provider-user(服务提供者)
3.启动microservice-gateway-zuul(zuul中心)
4.启动microservice-consumer-movie-ribbon-with-hystrix(服务提供者)
5.访问Eureka网址,看到都注册到服务中心了
localhost:8761
6.访问服务提供者
localhost:7900/simple/1
7.通过zuul动态路由访问服务提供者(访问规则,通过zuul的ip和服务设置的名称,访问注册中心的服务)(原始方案)
http://localhost:8040/microservice-provider-user/simple/1