博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Cloud Gateway 入门
阅读量:6094 次
发布时间:2019-06-20

本文共 4824 字,大约阅读时间需要 16 分钟。

hot3.png

文章首发于公众号《程序员果果》 地址:

简介

Spring Cloud Gateway ,相比之前我们使用的 Zuul(1.x) 它有哪些优势呢?Zuul(1.x) 基于 Servlet,使用阻塞 API,它不支持任何长连接,如 WebSockets。Spring Cloud Gateway 使用非阻塞 API,支持 WebSockets,支持限流等新特性。本文首先用官方的案例带领大家来体验下Spring Cloud的一些简单的功能。

创建工程

创建工程springcloud工程,名为springcloud-gateway-hello

pom.xml 内容如下:

4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.2.RELEASE
com.gf
springcloud-gateway-hello
0.0.1-SNAPSHOT
springcloud-gateway-hello
Demo project for Spring Boot
1.8
Greenwich.RELEASE
org.springframework.cloud
spring-cloud-starter-gateway
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
spring-milestones
Spring Milestones
https://repo.spring.io/milestone

##创建一个简单的路由 Spring Cloud Gateway 使用路由来处理对下游服务的请求。创建RouteLocator的Bean,在本案例将把所有请求路由到

@SpringBootApplicationpublic class SpringcloudGatewayHelloApplication {    public static void main(String[] args) {        SpringApplication.run( SpringcloudGatewayHelloApplication.class, args );    }    @Bean    public RouteLocator myRoutes(RouteLocatorBuilder builder) {        return builder.routes()                .route(p -> p                        .path("/get")                        .filters(f -> f.addRequestHeader("Hello", "World"))                        .uri("http://httpbin.org:80"))                .build();    }}

上述myRoutes方法RouteLocatorBuilder可以很容易地用于创建路由。除了创建路由之外,RouteLocatorBuilder还允许你在路由中添加各种 predicates(断言)filters,以便根据特定条件更改请求和响应。

上面创建的route可以让请求“/get”请求都转发到“

启动项目,访问

{  "args": {      },  "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,zh-TW;q=0.8",    "Cache-Control": "max-age=0",    "Connection": "close",    "Forwarded": "proto=http;host=\"127.0.0.1:8080\";for=\"127.0.0.1:55607\"",    "Hello": "World",    "Host": "httpbin.org",    "Upgrade-Insecure-Requests": "1",    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36",    "X-Forwarded-Host": "127.0.0.1:8080"  },  "origin": "127.0.0.1, 124.74.78.150",  "url": "http://127.0.0.1:8080/get"}

可见当向gateway工程请求“/get”,gateway会将工程的请求转发到“

使用Hystrix

在spring cloud gateway中可以使用Hystrix。Hystrix是 spring cloud中一个服务熔断降级的组件,在微服务系统有着十分重要的作用。 Hystrix 在 spring cloud gateway中是以filter的形式使用的,代码如下:

@Beanpublic RouteLocator myRoutes(RouteLocatorBuilder builder) {    return builder.routes()            .route(p -> p                    .path("/get")                    .filters(f -> f.addRequestHeader("Hello", "World"))                    .uri("http://httpbin.org:80"))            .route(p -> p                    .host("*.hystrix.com")                    .filters(f -> f.hystrix(config -> config                            .setName("mycmd")                            .setFallbackUri("forward:/fallback")))                    .uri("http://httpbin.org:80"))            .build();}

在上面的代码中,我们使用了另外一个router,该router使用host去断言请求是否进入该路由,当请求的host为 “*.hystrix.com”,都会进入该router,该router中有一个hystrix的filter,该filter可以配置名称、和指向性fallback的逻辑的地址,比如本案例中重定向到了“/fallback”。

现在写的一个“/fallback”的l逻辑:

@RequestMapping("/fallback")public String fallback() {    return "fallback";}

使用curl执行以下命令:

curl --dump-header - --header 'Host: www.hystrix.com' http://localhost:8080/delay/3

返回的响应为:

HTTP/1.1 200 OKContent-Type: text/plain;charset=UTF-8Content-Length: 8fallback

可见,带host www.hystrix.com 的请求执行了hystrix的fallback的逻辑。

源码

关注我

欢迎扫码或微信搜索公众号《程序员果果》关注我,关注有惊喜~

转载于:https://my.oschina.net/u/2367201/blog/3054888

你可能感兴趣的文章
joomla1.5前台组件开发过程分享(附中文开发教程两本)
查看>>
Sharepoint 2013企业内容管理学习笔记(二) 全自动化内容管理
查看>>
DateDiff()倒计时
查看>>
c++11新特性--decltype auto
查看>>
RawCap
查看>>
screen命令的最常见的使用方法
查看>>
我的友情链接
查看>>
Erlang教程
查看>>
linux服务器安装weblogic实战
查看>>
PostgreSQL从继承到分区(二)
查看>>
Windows7下彻底卸载MySQL5.5.21
查看>>
MySQL主从失败, 错误Got fatal error 1236解决方法
查看>>
我的友情链接
查看>>
操作系统内核
查看>>
AU14笔记-2
查看>>
Python urllib的urlretrieve()函数解析
查看>>
(FortiGate)飞塔防火墙BYOD网络安全解决方案
查看>>
Mysql 常用函数的 总结 (转)
查看>>
[李景山php]每天TP5-20170116|thinkphp5-Url.php-1
查看>>
jdk与jre的区别
查看>>