SpringCloud-Zuul路由网关
Zuul说明
Zull包含了对请求的路由(用来跳转的)和过滤两个最主要功能:
其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础,而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验,服务聚合等功能的基础。Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。
Zuul网关不是必要的。是推荐使用的
使用Zuul,一般在微服务数量较多(多于10个)的时候推荐使用,对服务的管理有严格要求的时候推荐使用,当微服务权限要求严格的时候推荐使用。
网关有以下几个作用:
- 统一入口:未全部为服务提供一个唯一的入口,网关起到外部和内部隔离的作用,保障了后台服务的安全性
- 鉴权校验:识别每个请求的权限,拒绝不符合要求的请求
- 动态路由:动态的将请求路由到不同的后端集群中
- 减少客户端与服务端的耦合:服务可以独立发展,通过网关层来做映射
Zuul的使用
由于我们使用的是同一台设备,所以配置一下hosts文件进行域名映射,新增一个域名来作为我们的zuul服务器,hosts文件所在路径:C:\Windows\System32\drivers\etc
新建springcloud-zuul-9527模块
Maven依赖
<!--Zuul依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
application.yml
server: port: 9527 spring: application: name: spring-cloud-zuul #Eureka的配置 eureka: client: service-url: defaultZone: http://Eureka-Server1:7001/eureka/,http://Eureka-Server2:7002/eureka/ instance: instance-id: zuul9527.com prefer-ip-address: true #显示IP # zull 路由网关配置 zuul: # 路由相关配置 # 原来访问路由: zuul访问地址 + 服务注册名称(必须小写) + 请求 # eg:http://www.zuul9527.com:9527/springcloud-provider-dept/get # 添加以下zull路由配置后访问路由,就把我们的服务名称给隐藏掉 # eg:http://www.zuul9527.com:9527/mydept/get routes: mydept.serviceId: springcloud-provider-user # eureka注册中心的服务提供方路由名称 mydept.path: /mydept/** # 将eureka注册中心的服务提供方路由名称 改为自定义路由名称 # 但是如果只做以上配置的话,我们除了zuul是还可以使用服务注册名称来进行访问的,所以我们还需要添加以下配置 # 通过以下配置,使我们不能再使用springcloud-provider-dept服务注册名称来进行访问,*: 忽略,隐藏全部的服务名称~ ignored-services: "*" # 设置公共的前缀,设置过后的访问地址 eg:http://www.zuul9527.com:9527/haust/mydept/get prefix: /haust
启动类
@SpringBootApplication @EnableZuulProxy public class SpringcloudZuul9527Application { public static void main(String[] args) { SpringApplication.run(SpringcloudZuul9527Application.class, args); } }
启动Eureka、zuul、服务提供者
访问Eureka可以看到我们的zuul服务
此时我们就可以通过zuul服务路由到我们的服务了,统一了入口,可以看到,URL也隐藏掉了我们的服务名称