springcloud 第1课 :Rest学习环境搭建—服务提供者
springcloud 第2课 :Rest学习环境搭建—服务消费者
springcloud 第3课 :Eureka是什么
springcloud 第4课 :Eureka服务注册、信息配置、自我保护机制
springcloud 第5课 :Eureka集群环境配置
springcloud 第6课 :Ribbon实现负载均衡
springcloud 第7课 :Feign负载均衡
springcloud 第8课 :Hystrix服务熔断
springcloud 第9课 :Hystrix服务降级
springcloud 第10课 :Hystrix-dashboard流监控
一、Zuul介绍
Zuul包含了对请求的路由和过滤两个最主要的功能:
其中路由功能负责将外部请求转发到具体的微服务实力上,是实现外部访问统一入口基础而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础。
Zuul和eureka进行整合,将Zuul自身注册到Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得的。
注意:Zuul最终还是会注册到Eureka。
提供=代理+路由+过滤三大功能
二、路由的基本配置
1、新建模块springcloud-zuul-9527
1、导入依赖
2、配置application.yaml文件
3、配置主启动类
1.1、导入pom依赖
<dependencies>
<!--实体类-->
<dependency>
<groupId>org.example</groupId>
<artifactId>springcloud-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--web启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<!--Ribbon-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
<!--eureka-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<!--hystrix-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
<!--hystrix监控-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
<!--zuul-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
</dependencies>
1.2、配置application.yaml
server:
port: 9527
#微服务注册名字
spring:
application:
name: springcloud-zuul
#eureka配置对应的几个集群,可以从集群中发现服务
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
instance:
instance-id: zuul9527.com #实例id
prefer-ip-address: true #隐藏真实ip地址
info: #info信息,给别人展示内容
app.name: lian-springcloud
company.name: msb
#路由网关
zuul:
routes:
mydept.serviceId: springcloud-provider-dept
mydept.path: /mydept/**
#ignored-services: springcloud-provider-dept #不能再使用这个路径访问了
ignored-services: "*" #隐藏全部的服务路径
prefix: /lian #设置公共的前缀
1.3、主启动类 ZuulApplication_9527
package com.lian.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
@EnableZuulProxy //开启zuul代理注解
@SpringBootApplication
public class ZuulApplication_9527 {
public static void main(String[] args) {
SpringApplication.run(ZuulApplication_9527.class,args);
}
}
1.4、hosts文件修改
(1)打开 C:\Windows\System32\drivers\etc\hosts 文件;
(2)增加:www.lian.com
#做测试用
127.0.0.1 eureka7001.com
127.0.0.1 eureka7002.com
127.0.0.1 eureka7003.com
127.0.0.1 www.lian.com
1.5、测试
(1)启动三个eureka集群, 一个生产者springcloud-provider-dept-hystrix-8001,启动路由网关微服务springcloud-zuul-9527;
(2)不用路由和启动路由的结果一样;
不用路由:http://localhost:8001/dept/get/1
启用路由: http://www.lian.com:9527/springcloud-provider-dept/dept/get/1
2、路由访问映射规则
以上使用 http://www.lian.com:9527/springcloud-provider-dept/dept/get/1 访问,则暴露出了调用的微服务名为 springcloud-provider-dept;为了不暴露出微服务的真正名称,使用路由访问映射;
2.1、在yml文件中增加路由映射
# 路由映射
zuul:
routes:
mydept.serviceId: springcloud-provider-dept # serviceId:映射的服务名
mydept.path: /mydept/** # path:映射成为的路径
routes路由设置前访问:http://www.lian.com:9527/springcloud-provider-dept/dept/get/1 (暴露微服务名称)
routes路由设置后访问:http://www.lian.com:9527/mydept/dept/get/1
2.2、在yml文件中增加原服务的忽略
此时使用 http://myzuul.com:9527/microservicecloud-dept/dept/get/2 和 http://myzuul.com:9527/mydept/dept/get/2 都可以成功的调用该接口,还是会暴露调用的微服务名为microservicecloud-dept;所以需要去让使用 http://myzuul.com:9527/microservicecloud-dept/dept/get/2 链接不能够访问;
#路由网关
#ignored-services:通过配置此选项,限制不能通过访问服务名去访问微服务
#如果想把其他很多的微服务都通过配置忽略掉真实访问路径则直接使用 ”*” 来代替
zuul:
routes:
mydept.serviceId: springcloud-provider-dept
mydept.path: /mydept/**
#ignored-services: springcloud-provider-dept #不能再使用这个路径访问了
ignored-services: "*" #隐藏全部的服务路径
2.3、重启微服务
使用原路径访问报错, http://www.lian.com:9527/springcloud-provider-dept/dept/get/1
使用路由映射路径可以正常访问:http://www.lian.com:9527/mydept/dept/get/1
2.4、设置统一公共前缀
(1)修改yml文件,如下所示
##路由网关
zuul:
routes:
mydept.serviceId: springcloud-provider-dept
mydept.path: /mydept/**
# #ignored-services: springcloud-provider-dept #不能再使用这个路径访问了
ignored-services: "*" #隐藏全部的服务路径
prefix: /lian #设置公共的前缀
(1)在浏览器中打开:http://www.lian.com:9527/lian/mydept/dept/get/1 可以正常访问;