什么是Zuul:
Zuul包含了对请求的路由和过滤两个最主要的功能:
其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础.
Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。
注意:Zuul服务最终还是会注册进Eureka
提供=代理+路由+过滤三大功能
官网:https://github.com/Netflix/zuul/wiki/Getting-Started
1:pom.xml
<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>
<parent>
<groupId>com.atguigu.springcloud</groupId>
<artifactId>microservicecloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>microservicecloud-provider-dept-8001</artifactId>
<dependencies>
<dependency><!-- 引入自己定义的api通用包,可以使用Dept部门Entity -->
<groupId>com.atguigu.springcloud</groupId>
<artifactId>microservicecloud-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- 将微服务provider侧注册进eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- 修改后立即生效,热部署 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
</project>
2配置文件:application.yml
server:
port: 9527
spring:
application:
name: microservicecloud-zuul-gateway-9527
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka
instance:
instance-id: ${spring.cloud.client.ipAddress}:${server.port} #gateway-9527.com
prefer-ip-address: true
info:
app.name: atguigu-microcloud
company.name: www.atguigu.com
build.artifactId: $project.artifactId$
build.version: $project.version$
#代理名称,下面是真实名字和代理名称都可以访问
#http://localhost:8001/dept/hello
#代理访问:http://myzuul.com:9527/microservicecloud-provider-dept/dept/hello
# 代理 / 服务名字
# 路由访问http://myzuul.com:9527/mydept/dept/get/1
# http://myzuul.com:9527/atguigu/mydept/dept/hello
zuul:
routes:
mydept.serviceId: microservicecloud-provider-dept
mydept.path: /mydept/**
#ignored-services: microservicecloud-dept #这个就是真实服务名字无法访问,如果是所有的都忽略就用*表示如
ignored-services: "*"
prefix: /atguigu #添加前缀
3:主启动类添加注解@EnableZuulProxy
package com.atguigu.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
@SpringBootApplication
@EnableZuulProxy
@EnableEurekaClient
public class Zuul_9527_StartSpringCloudApp {
public static void main(String[] args)
{
SpringApplication.run(Zuul_9527_StartSpringCloudApp.class, args);
}
}
注:
1 可以直接ip访问:http://localhost:8001/dept/hello
2 可以通过zuul+服务名访问::http://localhost:9527/microservicecloud-provider-dept/dept/hello
3 路由转发:http://localhost:9527/mydept/dept/get/1 其中mydep是自定义的path可以多个比如 api-a, api-b
配置文件中配置1代理名字,2是否忽略真实服务名字,3是否需要添加前缀
zuul:
routes:
mydept.serviceId: microservicecloud-provider-dept
mydept.path: /mydept/**
#ignored-services: microservicecloud-dept #这个就是真实服务名字无法访问,如果是所有的都忽略就用*表示如
ignored-services: "*"
prefix: /atguigu #添加前缀
zuul: routes: aaa: path: /api-a/** serviceId: service-ribbon bbb: path: /api-b/** serviceId: service-feign
1 服务名为service-zuul;以/api-a/ 开头的请求都转发给service-ribbon服务;以/api-b/开头的请求都转发给service-feign服务;