Zuul包含了对请求的路由和过滤两个最主要的功能:
其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础,类似于保安的职能,而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验,服务聚合等功能的基础,Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获取其他的微服务消息,也即以后访问微服务是通过Zuul跳转后获得,最终Zuul服务还是会注册进Eureka。提供 服务代理 ,路由,过滤三大功能。
从以上这张架构图中,我们可以看到所有的请求都必须通过API GateWay服务才能到达后面的服务,这就是Zuul所需要承担起来的责任。可见他的存在是很重要的
1.新建 boot 工程 修改pom文件
<dependencies> <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> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</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>com.wuzz.cloud</groupId> <artifactId>cloudservice-api</artifactId> <version>${project.version}</version> </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> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies>
2.修改application.yml
server: port: 9527 spring: application: name: cloudmicroservice-zuul-getway eureka: client: service-url: defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ instance: instance-id: getway-9527.com prefer-ip-address: true #访问路径显示IP地址 info: app.name: wuzz.cloudmicroservice company.name: www.newings.com build.artifactId: $project.artifactId$ build.version: $project.version$
3.修改主启动类
@SpringBootApplication @EnableZuulProxy public class DeptConsumer_Zuul_9527_App { public static void main( String[] args ) { SpringApplication.run(DeptConsumer_Zuul_9527_App.class, args); } }
启动Eureka集群,再启动 一个微服务服务提供者,再启动本开启了Zuul服务的微服务。可以通过 http://localhost:8001/dept/get/1 来访问服务提供者的服务 ,由于配置了Zuul,我们还可以通过 localhost:9527/CLOUD-PROVIDER-DEPT/dept/get/1 这个地址去访问
红色:对应的zuul服务的网关
蓝色:对应的zuul在Eureka集群上寻找到的已经注册在Eureka上的服务的服务名
黑色:对应的Restful请求地址
以上的配置 就对于localhost:9527/CLOUD-PROVIDER-DEPT/dept/get/1 这个服务地址,我们依然可以看到对应的微服务注册的真实服务名,这样子不利于服务的安全性,我们可以通过Zuul的路由规则来配置一个暴露地址,通过Zuul的路由跳转 ,去访问真实的服务地址。
修改pom文件
zuul: # zuul 的配置规则 prefix: /wuzz # 统一的公共前缀 ignored-services: cloud-provider-dept # "*" 所有 忽略原有服务名 routes: mydept.serviceId: cloud-provider-dept #域名映射 mydept.path: /mydept/**
这个时候我们可以通过 http://localhost:9527/wuzz/mydept/dept/get/1 去访问 ,此时再通过localhost:9527/CLOUD-PROVIDER-DEPT/dept/get/1 这个地址已经无法访问了。