欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spring微服务实战---zuul笔记

程序员文章站 2022-07-12 19:11:37
...

服务网关
服务客户端和被调用服务之间的中介,有了服务网关,服务客户端永远不会直接调用单个服务的url,而是将所有调用都放到服务网关之上。
作用:路由(静态和动态)、验证和授权、度量数据收集和日志记录

zuul
一个服务网关,非常容易通过spring cloud 注解 进行创建和使用。

zuul使用需要完成的3件事:
(1)建立一个zuul spring boot项目,并配置合适的maven依赖。
(2)使用spring cloud 注解 修饰这个spring boot项目,将其声明为zuul服务
(3)配置 zuul 以便 eureka 进行通信(可选)

依赖:

	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-zuul</artifactId>
	</dependency>

注解:
@EnableZuulProxy //加在启动引导类上,使服务成为一个Zuul服务器
@EnableZuulServer //该注解将创造一个zuul服务器,它不会加载任何zuul反向代理过滤器,也不会使用eureka进行服务发现

反向代理:
一个中间服务器,它位于尝试访问资源的客户端和资源本身之间。客户端甚至不知道它正与代理之外的服务器进行通信。反向代理负责捕获客户端的请求,然后代表客户端调用远程资源。
zuul的核心是一个反向代理。

zuul路由映射机制:
通过(eureka)服务发现自动映射路由
无需配置,zuul根据服务ID自动路由请求(向eureka)(如果服务实例没有在运行,zuul将不会公开该服务的路由)
通过(eureka)服务发现手动映射路由
可自定义路由映射,而不单纯依赖eureka服务ID创建的自动路由(不管服务实例是否在运行,zuul仍会公开路由,如果调用不存的服务路由,则报500)
通过静态URL手动映射路由
zuul可以路由那些不受eureka管理的服务

如何禁止zuul自动路由:

zuul:
	ignored-services: 'organizationservice'				// ignored-services参数可禁止自动路由,若要禁止所有自动路由,可将值设为*
	prefix: /api										// 所有已定义的服务都将添加前缀/api
	routes:
		organizationservice: /organization/**
		

/api作用:api路由 和 内容路由 ??

静态路由设置方法:

zuul:
	routes:
		xxxxxx:											// zuul用于在内部识别服务的关键字
		path: /xxxxxx/**								// 静态路由
		url: http://ip:port								// 已建立服务的静态实例,将被直接调用,而不是通过eureka调用

zuul使用hystrix和ribbon,来帮助防止长时间运行的服务调用影响服务网关的性能,默认情况下,对于任何需要1s的时间(hystrix默认值)来处理请求的调用,zuul将终止报500.
参数:hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 2500 // 超时设置为2.5s
如果需要为特定服务设置hystrix超时,可以将需要被覆盖超时的服务的eureka服务id 替换 上述参数中的 default
ribbon同样有超时设置。ps:spring微服务实战144页

zuul 核心:过滤器 // 相当于servlet和aop
前置过滤器
在请求被发送到目的地之前被调用 // 主要用于验证请求合法性
后置过滤器
在请求发送到目的地,且响应回给客户端后,被调用 // 主要用于记录从目标服务返回的响应、处理错误、审核敏感信息响应
路由过滤器
在发送给目的地前被拦截调用 // 可将服务在两个新老版本间进行路由,能够让少量用户体验新功能
// 不会执行http重定向,而是会终止传入的http请求,然后代表原始调用值调用路由

UserContextFilter 类是一个自定义的http servlet过滤器,它将关联ID映射到UserContext类。

/* 点滴积累 */

相关标签: zuul