- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章SpringCloud Zuul实现动态路由由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
前言 。
zuul 是在spring cloud netflix平台上提供动态路由,监控,弹性,安全等边缘服务的框架,是netflix基于jvm的路由器和服务器端负载均衡器,相当于是设备和 netflix 流应用的 web 网站后端所有请求的前门。本文基于上篇(springcloud系列——ribbon 负载均衡)实现zuul动态路由 。
github地址:https://github.com/netflix/zuul 。
官方文档:https://cloud.spring.io/spring-cloud-static/spring-cloud-netflix/2.1.0.rc2/single/spring-cloud-netflix.html 。
代码编写 。
首先我们在springcloud下面新建一个springboot项目:zuul-server,pom继承parent,并且在eureka上面注册(还不会服务注册与发现的,请戳:springcloud系列——eureka 服务注册与发现) 。
maven引入zuul 。
1
2
3
4
5
|
<!-- zuul -->
<dependency>
<groupid>org.springframework.cloud</groupid>
<artifactid>spring-cloud-starter-netflix-zuul</artifactid>
</dependency>
|
配置文件 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
server.port=
10010
spring.application.name=zuul-server
eureka.client.serviceurl.defaultzone=http:
//localhost:1111/eureka/
#健康检查(需要spring-boot-starter-actuator依赖)
eureka.client.healthcheck.enabled=
true
# 续约更新时间间隔(默认
30
秒)
eureka.instance.lease-renewal-interval-in-seconds=
10
# 续约到期时间(默认
90
秒)
eureka.instance.lease-expiration-duration-in-seconds=
10
#zuul代理配置 zuul.routes.服务名.path,服务名要与注册的一致
#应用名映射
zuul.routes.myspringboot.path=/myspringboot/**
zuul.routes.myspringboot.service-id=myspringboot
#url映射
#zuul.routes.myspringboot.path=/myspringboot/**
#zuul.routes.myspringboot-url.url=http:
//localhost:10087/
|
自定义zuul过滤器 。
更多的检查规则后续慢慢健全 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
/**
* zuul过滤器,实现了路由检查
*/
public
class
accessfilter
extends
zuulfilter {
/**
* 通过int值来定义过滤器的执行顺序
*/
@override
public
int
filterorder() {
// predecoration之前运行
return
pre_decoration_filter_order -
1
;
}
/**
* 过滤器的类型,在zuul中定义了四种不同生命周期的过滤器类型:
* public static final string error_type = "error";
* public static final string post_type = "post";
* public static final string pre_type = "pre";
* public static final string route_type = "route";
*/
@override
public
string filtertype() {
return
pre_type;
}
/**
* 过滤器的具体逻辑
*/
@override
public
object run() {
requestcontext ctx = requestcontext.getcurrentcontext();
httpservletrequest request = ctx.getrequest();
system.out.println(string.format(
"%s accessfilter request to %s"
, request.getmethod(),request.getrequesturl().tostring()));
string accesstoken = request.getparameter(
"accesstoken"
);
//有权限令牌
if
(!stringutils.isempty(accesstoken)) {
ctx.setsendzuulresponse(
true
);
ctx.setresponsestatuscode(
200
);
//可以设置一些值
ctx.set(
"issuccess"
,
true
);
return
null
;
}
else
{
ctx.setsendzuulresponse(
false
);
ctx.setresponsestatuscode(
401
);
ctx.setresponsebody(
"{\"result\":\"accesstoken is not correct!\"}"
);
//可以设置一些值
ctx.set(
"issuccess"
,
false
);
return
null
;
}
}
/**
* 返回一个boolean类型来判断该过滤器是否要执行
*/
@override
public
boolean
shouldfilter() {
return
true
;
}
}
|
启动类 。
添加@enablezuulproxy注解并使用自定义过滤器 。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@enablezuulproxy
@springbootapplication
public
class
zuulserverapplication {
public
static
void
main(string[] args) {
springapplication.run(zuulserverapplication.
class
, args);
}
@bean
public
accessfilter accessfilter() {
return
new
accessfilter();
}
}
|
效果演示 。
启动所有项目,我们在eureka上注册了四个服务,相比上篇(springcloud系列——ribbon 负载均衡)多了一个zuul 。
浏览器访问 http://localhost:10010/myspringboot/feign/ribbon、http://localhost:10010/myspringboot/feign/ribbon?accesstoken=123456 。
http://localhost:10010/ 这个端口对外暴露,相对于总入口,后面接不同的路径由,zuul路由到对应的服务上 。
1、没有accesstoken是,无法通过检查 。
2、携带accesstoken时,可正常路由,并且feign调用、ribbon负载均衡 。
后记 。
我们为什么要使用zuul呢?
1、请求校验、路由转发,接口校验与业务逻辑分离 。
2、隐藏诸多服务路径,只暴露统一入口,安全 。
更多zuul配置,请看官方文档 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://www.cnblogs.com/huanzi-qch/p/10142395.html 。
最后此篇关于SpringCloud Zuul实现动态路由的文章就讲到这里了,如果你想了解更多关于SpringCloud Zuul实现动态路由的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有一个 spring boot 微服务,它需要基本的身份验证数据,即固定的用户 ID/密码(如管理员/密码)。我正在使用 Spring cloud netflix 生态系统来编排微服务。 祖尔 是我
我们的服务目前使用 spring cloud netflix zuul 作为我们的网关。 现在我们要支持websocket,所以我们需要将zuul 1迁移到zuul 2或spring cloud ga
使用 Zuul,我可以轻松定义在将请求转发到特定服务之前或之后激活的自定义过滤器。 有没有办法阻止请求在“预”过滤器级别转发,并立即将响应发送给客户端? 我知道“静态”过滤器可以做类似的事情,但我需要
通过 Zuul 向客户端发送请求时,Zuul 似乎更改了查询字符串。更具体地说,如果客户端应该收到一个 url 编码的查询字符串,Zuul 会对查询字符串进行一次解码。下面是一个具体的例子: 如果“h
我正在寻找一种可以在 API Gateway 中提供某种数据聚合的解决方案。我正在将 spring cloud netflix zuul 用于 API 网关。我使用 Spring Boot 创建了 3
我很难理解 Zuul 和 Ribbon 之间的联系。 我想我明白 Zuul 了。这是一个反向代理,我可以联系它来访问我的几个服务实例之一。它将使用循环算法或您对其进行的任何配置来选择正确的服务器。这是
我如何为多个 zuul 路由实现多个 zuulFallbackProvider。除了公开 restcontroller 并使用 hystrixcommand 实现方法之外,我看不到如何仅使用属性来做到
我是 Spring Cloud 的新手,在我的项目(使用 Spring Boot 构建的微服务项目)中,我使用了 Spring Cloud 版本 Brixton.RC2,并且运行良好。但是当我尝试将其
我在服务 A 和 B 前使用 Netflix Zuul 代理。 如何让 Zuul 代理根据传入请求中的 HTTP header 在 A 和 B 的路由之间进行选择? 最佳答案 您应该根据您的逻辑创建一
我读了 docs但我仍然不确定这两个属性之间的区别: zuul: ignored-headers: sensitive-headers: 如果您能用其他词来解释它,将不胜感激。 最佳答案 敏感
我想了解 Netflix Zuul2 和 Spring Cloud Gateway 之间的技术差异。 Spring Cloud Gateway 是异步的,Zuul2 也是如此 都支持Http2 都支持
我有以下简单服务: 交易核心服务和交易api服务。 transaction-api-service调用Transactions-core-service返回事务列表。 transaction-api-
主要问题是注册表的兼容性。如果没有,如何处理网关问题? 最佳答案 取决于你的意思。您可以在 Micronaut 应用程序前使用 Zuul 或 Spring Cloud Gateway 作为网关解决方案
我已经在 Eureka 服务器中注册了 UI 和后端应用程序。它已启动并正在运行(两个应用程序)。配置zuul application.yml: zuul: sensitive-headers:
我已经有一个基于微服务的应用程序运行在 Spring Cloud 上,并将 zuul 作为 API 网关,但由于公司用例,我们正在考虑更改为 Graphql 而不是传统的 Rest,因此我正在考虑为每
您好,特别是先生Josh Long !来自菲律宾的问候! 我只是想寻求有关 Zuul 问题的帮助。我正在使用 Config Server、Eureka Discovery、Zuul API Gatew
Zuul 屏蔽服务和指定路径 有时我们的一些后端服务并不想暴露出去 我们可以通过屏蔽服务或者路径的方式来进行实现: ### 网关配置 zuul: routes: dem
上图为一个微服务框架的简单示例,当有一个HTTP请求发送到服务器的时候,其实是先经过了Nginx的,再经过了网关,这里的网关就担任了拦截过滤的作用,既然拦截和过滤了,肯定就涉及到了请求的转发
Zuul:stripPrefix默认开启 true,去除 /** 前的所有前缀 SpringCloudGateway: 默认不开启,stripPrefix原理是过滤器,/a/b情况下, =1:去除/a
我们目前有一个直接的 Websocket 连接到一个后端 web 服务 来自我们的 UI 应用程序。现在,当我们尝试通过 Zuul(ApiGateway) 执行相同操作时,我们无法连接到后端服务 我们
我是一名优秀的程序员,十分优秀!