使用Spring Cloud和Zuul进行服务路由(学习笔记)

源码:Service routing with Spring Cloud and Zuul

前言

同样像之前一样吧postgres开起来备用。配置服务记得改成本地的环境,尤其是组织服务,要配一下:
在这里插入图片描述
组织表也要创建。sql在组织服务里找。
在这里插入图片描述
配置文件用本地查找模式:
在这里插入图片描述

一、在Zuul中配置路由

在这里插入图片描述
在这里插入图片描述
小笔记:一般用Zuul和Eureka集成时,用@EnableZuulProxy,还有个注解叫@EnableZuulServer,使用它将创建一个Zuul服务器,它不会加载任何Zuul反向代理过滤器,也不会使用Eureka进行服务发现,与其他服务发现引擎(比如Consul)集成时才用它。
在这里插入图片描述

二、在Zuul中配置路由

三种机制:

  • 使用服务发现自动映射路由
  • 使用服务发现手动映射路由
  • 使用静态URL手动映射路由

1.通过服务发现自动映射路由

这个不需要配置:URL/服务ID/具体路径即可。
验证一下,首先开启Eureka,,然后配置服务,然后其他服务,然后开启Zuul服务。
在这里插入图片描述

2.使用服务发现手动映射路由

在这里插入图片描述
在这里插入图片描述
小笔记:在使用自动路由映射时,Zuul只基于Eureka服务ID来公开服务,如果服务的实例没有在运行,Zuul将不会公开该服务的路由。然而,如果手动配置的话,会产生路由,但是实际使用时路由过去可能会收到一个500错误。
可以用ignored-services从自动映射中排除想排除的服务。设为*就是排除所有。
还可以用prefix来设置URL前缀。忽略的就不演示了。前缀的演示一下。
在这里插入图片描述
在这里插入图片描述

3.使用静态URL手动映射路由

可以直接这样配置死,绕过Eureka。
在这里插入图片描述
也可以在Ribbon中禁用Eureka,配置路由列表,就是一对多。
小笔记:在Ribbon中晋中Eureka意味着Eureka服务器将承受更多的负载。

4.动态重新加载路由配置

访问/refresh端点即可。

5.服务超时

Hystrix默认一秒种是超时时间,可以通过配置配置各个服务的超时时间来进行超时设置,注意超过5s的配置,

三、Zuul的真正威力:过滤器

通过上面的学习可以知道,zuul的基本应用和Nginx差不多,概念也很容易理解,但是Zuul的真正的威力在于其过滤器。
其实理解过滤器,它就像理解Serverlet里的Filter,修饰者模式,不影响原始编码人员。
分为前置,后置和路由,路由过滤器的使用:比如不同版本的服务。

先来一个前置过滤器:

在这里插入图片描述
在这里插入图片描述
注意对request进行操作的时候,不是用的http默认的request,而是zuul包装的,添加的方法也是zuul包装后的一个函数。
在这里插入图片描述
接下来要研究怎么去在服务调用的过程中全程跟踪这个id。
我们要定义三个类:
1.UserContextFilter:拦截传入的http请求
它是一个Http serverlet过滤器。
在这里插入图片描述
2.UserContext:使服务易于访问HTTP首部。
这个很简单,定义一个pojo,然后把这个pojo存在ThreadLocal中。
在这里插入图片描述
3.自定义RestTemplate和UserContextInteceptor:确保关联ID被传播
在这里插入图片描述
在这里插入图片描述
小笔记:现在关联ID就可以在全局传播了,这样日志就可以有一个关联主键了。在这里先不讨论日志服务。

四、构建接收关联ID的后置过滤器

在这里插入图片描述
验证一下:
在这里插入图片描述
在这里插入图片描述

五、构建动态路由过滤器

SpecialRoutesFilter代码:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
验证:
验证之前,还得新建一个表:
在这里插入图片描述
另外检查一下特殊路由服务的配置:
在这里插入图片描述
在这里插入图片描述
发现它并没有从配置中心拉到配置文件,因为我用的是native本地查找的,所以再给它添加个配置文件就可以了。
在这里插入图片描述
在这里插入图片描述
然后依次启动Eureka->config->证书,组织,组织新,特殊路由->zuul路由服务。一共七个微服务。(端口设置不一样,Eureka是自动发现的)
等30s,服务注册完毕:
在这里插入图片描述
AB测试就可以用了。
在这里插入图片描述
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章