1.gateway和zuul

Spring Cloud Finchley版本的gateway比zuul 1.x系列的性能和功能整体要好,且使用 Gateway 做跨域相比应用本身或是 Nginx 的好处是规则可以配置的更加灵活。Spring Cloud大型企业分布式微服务云架构源码请加一七九一七四三三八零

这两者相同的地方就是都是作为网关,处理前段的请求,可以进行路由到对应的服务或者url,也可以针对权限做过滤处理,也可以对其他服务响应的结果做处理。

2.简单使用gateway

有两种方式配置,一种是配置文件application的方式,一种是代码配置

a.application配置:

a. 路由到其他地址

spring:cloud:gateway:#可以根据请求参数,cookie,host,请求时间,请求头等进行校验判断路由, 下面根据先后顺序转发routes:- id: host_routeuri: http://httpbin.org:80/getpredicates:- Path=/zzzgd/** # 请求地址携带zzzgd的,则转发复制代码

在spring.cloud.gateway.routes中,我们可以根据不同的谓语配置不同的路由,根据配置的先后顺序来跳转,越在前面优先级越高.

其中id,区分不同的路由规则,不可重复,uri,指需要跳转的地址,Predicates就是上面说的谓语了,可以配置多个,使用正则匹配. 这里我们配置的是如果请求地址携带zzzgd则会跳转到我们配置的uri。

配置好gateway,重新启动,然后我们调用localhost:8088(网关的地址和端口)/zzzgd/abc,这个地址是没有任何匹配的接口的,按理来说会返回404,但是配置了网关就返回了这些信息,这个是我们配置的uri所返回的:

{"args": {"name": "zgd"}, "headers": {"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", "Accept-Encoding": "gzip, deflate, br", "Accept-Language": "zh-CN,zh;q=0.9", "Connection": "close", "Cookie": "SL_G_WPT_TO=zh; SL_GWPT_Show_Hide_tmp=undefined; SL_wptGlobTipTmp=undefined", "Forwarded": "proto=http;host=\"localhost:8088\";for=\"0:0:0:0:0:0:0:1:55782\"", "Host": "httpbin.org", "Upgrade-Insecure-Requests": "1", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36", "X-Forwarded-Host": "localhost:8088"}, "origin": "0:0:0:0:0:0:0:1, 119.147.213.42", "url": "http://localhost:8088/get?name=zgd"
}
复制代码

上面的是根据地址来路由,还有下面多种路由配置:

根据域名来转发路由:

routes:- id: host_routeuri: http://httpbin.org:80/getpredicates:- Host=**.csdn.** # 请求域名携带csdn的,则转发- id: query_routeuri: http://httpbin.org:80/getpredicates:- Query=username, zzz* # 请求参数含有username,且值满足zzz开头的,则转发(对值的匹配可以省略)- id: header_routeuri: http://httpbin.org:80/getpredicates:- Header=request, \d+ # 如果请求头含有request,且为数字,则转发- id: cookie_routeuri: http://httpbin.org:80/getpredicates:- Cookie=name, zzzgd # 如果携带cookie,参数名为name,值为zzzgd,则转发- id: path_routeuri: http://httpbin.org:80/getpredicates:- Path=/zzzgd/** # 请求地址携带zzzgd的,则转发# 路由到其他服务,url需要用[lb://]+[serviceId]- id: service_clienturi: lb://service-clientpredicates:- Path=/to_client/** # 如果请求地址满足/to_client/**,则转发到 service-client 服务filters:- StripPrefix=1 # 去除请求地址中的to_client- id: after_routeuri: http://httpbin.org:80/getpredicates:- After=2019-01-01T17:42:47.789-07:00[America/Denver] # 如果请求时间大于该时间,则转发
复制代码

b. 路由到其他服务

我们知道,zuul是可以根据服务在eureka的serviceId,来将请求路由到不同的服务上,这也是网关最大的作用之一,gateway也可以

gateway可以通过开启以下配置来打开根据服务的serviceId来匹配路由,默认是大写:

# 配置gateway路由
spring:cloud:gateway:discovery:locator:# 是否可以通过其他服务的serviceId来转发到具体的服务实例。默认为false# 为true,自动创建路由,路由访问方式:http://Gateway_HOST:Gateway_PORT/大写的serviceId/**,其中微服务应用名默认大写访问enabled: true
复制代码

开启配置,重启gateway,访问 localhost:8088/SERVICE-CLIENT/hi?name=zgd,

正常返回了service-client的结果.

如果需要小写serviceId,则配置spring.cloud.gateway.locator.lowerCaseServiceId:true

注意事项

不管小写大写,不能使用下划线,否则会报:

org.springframework.cloud.gateway.support.NotFoundException: Unable to find instance for localhost

所以服务的 spring. application .name 必须用中划线而不是下划线

如果开启了lowerCaseServiceId,则只能用小写,不能识别大写,如果不开启,只能识别大写

除了上面这种自动设置路由服务,也可以手动设置,在routes中配置

# 路由到其他服务,url需要用[lb://]+[serviceId]
- id: service_clienturi: lb://service-clientpredicates:- Path=/to_client/** # 如果请求地址满足/to_client/**,则转发到 service-client 服务filters:- StripPrefix=1 # 去除请求地址中的to_client
复制代码

这里的uri不是一个具体的地址了,而是lb://开头,加上serviceId 然后比如上面这个配置,我们 再调用 localhost:8088/to_client/hi?name=zgd

可以看到也正常收到了service-client的返回.说明我们调用到了这个服务.

这里需要注意的一点,如果不加上filters.- StripPrefix=1,那么则无法请求到hi这个接口.因为对于service-client,相当于收到的请求路径是localhost:8090/to_client/hi?name=zgd,这个to_client只是为了网关的路由加上去的,不需要业务服务也收到这段地址,所以需要去掉。

转载于:https://juejin.im/post/5c904f1e5188252d876e4231

整合spring cloud云架构 - Gateway的基本入门相关推荐

  1. 整合spring cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)

    之前写了很多关于spring cloud的文章,今天我们对OAuth2.0的整合方式做一下笔记,首先我从网上找了一些关于OAuth2.0的一些基础知识点,帮助大家回顾一下知识点: 一.oauth中的角 ...

  2. Java架构-(十) 整合spring cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)

    之前写了很多关于spring cloud的文章,今天我们对OAuth2.0的整合方式做一下笔记,首先我从网上找了一些关于OAuth2.0的一些基础知识点,帮助大家回顾一下知识点: 一.oauth中的角 ...

  3. (十) 整合spring cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)

    之前写了很多关于spring cloud的文章,今天我们对OAuth2.0的整合方式做一下笔记,首先我从网上找了一些关于OAuth2.0的一些基础知识点,帮助大家回顾一下知识点: 一.oauth中的角 ...

  4. (十六) 整合spring cloud云架构 -使用spring cloud Bus刷新配置

    2019独角兽企业重金招聘Python工程师标准>>> 我们使用spring cloud分布式微服务云架构做了b2b2c的电子商务系统,除了架构本身自带的系统服务外,我们将b2b2c ...

  5. 整合spring cloud云架构 - SSO单点登录之OAuth2.0 登出流程(3)

    2019独角兽企业重金招聘Python工程师标准>>> 上一篇我根据框架中OAuth2.0的使用总结,画了一个根据用户名+密码实现OAuth2.0的登录认证的流程图,今天我们看一下l ...

  6. 整合spring cloud云架构 - SSO单点登录之OAuth2.0登录流程

    现在我们针对于login做成相关的微服务,解析如下: 请求方式:POST 服务URL: http://localhost:8080/user/login 参数类型:application/json H ...

  7. java 云架构_java版Spring Cloud云架构代码结构构建

    本篇我们根据架构图进行代码的构建.根据微服务化设计思想,结合spring cloud一些优秀的项目,如服务发现.治理.配置化管理.路由负载.安全控制等优秀解决方案,使用Maven技术将框架进行模块化. ...

  8. (八)整合spring cloud云服务架构 - commonservice-eureka 项目构建过程

    我们针对于HongHu cloud的eureka项目做以下构建,整个构建的过程很简单,我会将每一步都构建过程记录下来,希望可以帮助到大家: 1. 创建一个名为particle-common-eurek ...

  9. (七)整合spring cloud云服务架构 - common-service 项目构建过程

    我们将对common-service整个项目进行剖析,将整个构建的流程给记录下来,让更多的关注者来参考学习. 首先在构建spring cloud的common-service之前,我们需要准备的技术: ...

最新文章

  1. 关于python语言、下列说法不正确的是-下列语句中,___________是不正确的Python语句...
  2. arrive get
  3. 推荐一个优化分页查询的办法(分页数很大的情况)
  4. 洛杉矶手机资费9.9美元包打一年
  5. 21张GIF动图让你秒懂数学原理
  6. 如何使用Hibernate批处理INSERT和UPDATE语句
  7. SQL Server数据库大型应用解决方案总结【转】
  8. 使用wireshark抓取3G包
  9. C#结构体和字节数组的转换
  10. 使用升级版的 Bootstrap typeahead v1.2.2
  11. ExtJS入门到精通视频教程下载 ExtJS视频教程
  12. idea Mac格式化代码快捷键
  13. Polar SI9000阻抗计算
  14. Windows 中使用苹果 macOS 动态桌面壁纸
  15. 虚拟专用网络安全技术
  16. 电气器件系列十六:热电偶、热电阻
  17. 外派linux运维,请好好善待你身边的Linux运维工程师,因为他们...
  18. 零基础如何速成插画?插画入门教程分享!
  19. 客单价怎么算 影响客单价的主要因素有哪些?
  20. 如何实现复制文本到剪贴板?

热门文章

  1. python中处理日期和时间的标准模块是-2019python常见的170道面试题解析
  2. python画出心形图-python画出心形图
  3. python单词意思-Python
  4. python贴吧回帖-python控制浏览器爬取百度贴吧回复并写入Excel
  5. python读csv-python读写csv文件
  6. python入门教程完整版-Python入门教程完整版(懂中文就能学会)
  7. python游戏-Python游戏
  8. python类中方法的执行顺序-Python实例化class的执行顺序实例方法
  9. redis中的ziplist
  10. LeetCode Combination Sum IV(动态规划)