路由器和过滤器:Zuul
路由在微服务体系结构的一个组成部分。例如,/可以映射到您的Web应用程序,/api/users映射到用户服务,并将/api/shop映射到商店服务。Zuul是Netflix的基于JVM的路由器和服务器端负载均衡器。
Netflix使用Zuul进行以下操作:
认证
洞察
压力测试
金丝雀测试
动态路由
服务迁移
负载脱落
安全
静态响应处理
主动/主动流量管理
Zuul的规则引擎允许基本上写任何JVM语言编写规则和过滤器,内置Java和Groovy。
我们已经成功注册了service2,service1两个服务,光是注册了服务还不行,这里可以再配一个网关,让服务调用有统一的入口.
我们来创建一个gateway项目
首先我们要依赖对应的jar包 pom.xml
dependencies>
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
spring-cloud-starter-netflix-zuul
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
然后启动类加注解
然后配置对应的yml文件,配置euraka
pe配置zuul
这里有好几种方式,我上面用了两种
routes:
XXX:唯一的
path: 需要访问项目的路径
serviceId: 对应的serviceId
outes:
serviceId: path
prefix:配置路径头部可以是
这样访问的时候就可以通过路由来访问其他两个服务了:
中间可能会出现一个异常,那就是你的gateway明明已经注册到了两个服务但是依然报找不到服务的问题,这个时候我们可以去修改host文件
那么路由器的功能就搞定了,接下来我们来写过滤器
先写个类MyZuulGetFilter继承ZuulFilter 然后实现他的几个方法
public String filterType() {
return “pre”;//pre:可以在请求被路由之前调用。 routing:在路由请求时候被调用。 post:在routing和error过滤器之后被调用。 error:处理请求时发生错误时被调用。
}
filterType过滤器类型
@Override
public int filterOrder() {
return 0;
}
filterOrder通过int值来定义过滤器的执行顺序,数值越小优先级越高。
shouldFilter:返回一个boolean类型来判断该过滤器是否要执行。我们可以通过此方法来指定过滤器的有效范围。
run:过滤器的具体逻辑。在该函数中,我们可以实现自定义的过滤逻辑,来确定是否要拦截当前的请求,不对其进行后续的路由,或是在请求路由返回结果之后,对处理结果做一些加工等。
这是我们的代码
访问时可以看到控制台输出的
简单的路由器和过滤器就写好了,具体的复杂业务逻辑可以根据自己的需要去写
---------------------------------写的不好,仅供参考