spring-cloud 学习笔记(6)

2021年11月24日 阅读数:3
这篇文章主要向大家介绍spring-cloud 学习笔记(6),主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

STEP 6 : API Gateway 之 Netflix Zuul

什么是API Gateway

API Gateway是一个服务器,也能够说是进入系统的惟一节点。这跟面向对象设计模式中的Facade模式很像。API Gateway封装内部系统的架构,而且提供API给各个客户端。它还可能有其余功能,如受权、监控、负载均衡、缓存、请求分片和管理、静态响应处理等。html

API Gateway负责请求转发、合成和协议转换。全部来自客户端的请求都要先通过API Gateway,而后路由这些请求到对应的微服务。API Gateway将常常经过调用多个微服务来处理一个请求以及聚合多个服务的结果。它能够在web协议与内部使用的非Web友好型协议间进行转换,如HTTP协议、WebSocket协议。java

API Gateway能够提供给客户端一个定制化的API。它暴露一个粗粒度API给移动客户端。以产品最终页这个使用场景为例。API Gateway提供一个服务提供点(/productdetails?productid=xxx)使得移动客户端能够在一个请求中检索到产品最终页的所有数据。API Gateway经过调用多个服务来处理这一个请求并返回结果,涉及产品信息、推荐、评论等。nginx

简单的来讲,API Gateway功能有点儿像nginx,它是整个系统服务的总入口(即网关),它能够将请求分发到不一样的微服务上。git

  • 相比nginx,API Gateway是一个简化的轻量级的网关,它简化了内部服务相互调用的复杂度。
  • 相比nginx,API Gateway能动态修改服务的地址,以及服务的启用和关闭,而不须要复杂的配置文件。

Zuul

做为Netflix全家桶之一,zuul承担了API Gateway的功能,它拥有如下功能:web

  • 认证鉴权
  • 审查
  • 压力测试
  • 金丝雀测试
  • 动态路由
  • 服务迁移
  • 负载剪裁
  • 安全
  • 静态应答处理

同时,Zuul容许使用任何支持JVM的语言来创建规则和过滤器,而且内置了对Java和Groovy的支持。spring

简单使用

咱们将使用前面几节搭建的微服务框架进行改造,加入简单的zuul服务路由。设计模式

1. 搭建项目

新建spring boot项目,若是使用spring initializr,请勾选zuul,若是直接建立,须要引入依赖:缓存

<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>  

引入eureka的目的是为了后续与eureka作整合,使用serviceId作路由。安全

修改SpringCloudZuulServerApplication 启动类,添加@EnableZuulProxy注解:服务器

@SpringBootApplication  
@EnableZuulProxy  
public class SpringCloudZuulServerApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringCloudZuulServerApplication.class, args);
	}
}  

修改配置文件application.properties:

spring.application.name=spring-cloud-zuul-server
server.port=3001

eureka.client.service-url.defaultZone=http://192.168.1.110:9999/eureka/

2.运行项目

分别启动项目:

  • spring-cloud-eureka-server 服务发现服务端
  • spring-cloud-eureka-client 提供远程服务调用接口
  • spring-cloud-server-consumer 服务消费者,使用Feign调用远程服务,并提供服务callServer返回远程调用结果
  • spring-cloud-zuul-server zuul路由服务

zuul的默认规则:

默认状况下,即无任何zuul配置的时,zuul会默认代理全部注册到Eureka Server的微服务,而且Zuul的路由规则以下:http://ZUUL_HOST:ZUUL_PORT/微服务在Eureka上的serviceId/**会被转发到serviceId对应的微服务。

调用spring-cloud-server-consumer的接口http://192.168.1.110:2001/callServer,返回结果:

[SPRING-CLOUD-EUREKA-CLIENT, SPRING-CLOUD-SERVER-CONSUMER, SPRING-CLOUD-ZUUL-SERVER]

调用spring-cloud-zuul-server的接口http://192.168.1.110:3001/spring-cloud-server-consumer/callServer,返回结果:

[SPRING-CLOUD-EUREKA-CLIENT, SPRING-CLOUD-SERVER-CONSUMER, SPRING-CLOUD-ZUUL-SERVER]

能够看见,两种调用方法结果一致,说明zuul正确的对咱们的服务进行的分发。

进阶使用

1. 忽略、指定路由

忽略指定服务,使用号隔开,支持正则匹配,直接填写*则所有忽略:

zuul.ignored-services=spring-cloud-eureka-client  

指定路由,规则是 zuul.routes.服务名称=指定的服务地址 ,被指定的服务若是存在于忽略服务列表中,将不会被忽略

zuul.routes.spring-cloud-server-consumer=/server/**

2. 动态路由配置

使用动态配置加载保存在git或其余配置文件中的配置信息,参考文章:

scipio : zuul动态路由加载配置

结束

本文部分文原本源于互联网

感谢如下文章提供的灵感和帮助