博客
关于我
Spring Cloud Gateway - 快速开始
阅读量:423 次
发布时间:2019-03-06

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

点击上方☝
码农小胖哥
,轻松关注!
及时获取有趣有料的技术文章

Spring Cloud Gateway 工作原理

客户端向 Spring Cloud Gateway 发出请求,如果请求与网关程序定义的路由匹配,则将其发送到网关 Web 处理程序,此处理程序运行特定的请求过滤器链。

过滤器之间用虚线分开的原因是过滤器可能会在发送代理请求之前或之后执行逻辑。所有 "pre" 过滤器逻辑先执行,然后执行代理请求,代理请求完成后,执行 "post" 过滤器逻辑。

如何启动 Spring Cloud Gateway

1、新建 Maven 工程,添加相关依赖 pom.xml

4.0.0
com.anoyi
core-gateway
0.0.1-SNAPSHOT
core-gateway
gateway for miroservice
UTF-8
UTF-8
1.8
org.springframework.cloud
spring-cloud-gateway
2.0.0.RELEASE
pom
import
org.springframework.cloud
spring-cloud-starter-gateway
org.springframework.boot
spring-boot-maven-plugin

2、添加启动类 Application.java

import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.annotation.Configuration;@Configuration@SpringBootApplicationpublic class Application {    public static void main(String[] args) {        SpringApplication.run(Application.class, args);    }}

3、启动 Application(和 Spring Boot 项目一样)

访问 http://localhost:8080/ 报错 404,同时日志输出:

2018-06-27 09:18:48.981  WARN 44156 --- [ctor-http-nio-2] .a.w.r.e.DefaultErrorWebExceptionHandler : Failed to handle request [GET http://localhost:8080/]: Response status 404

配置服务的路由:配置文件方式

假设本地启动了另外两个 Spring Boot 服务,分别是 服务A( http://localhost:8081 )、服务B( http://localhost:8082 ),下面通过 Spring Cloud Gateway 来路由到这两个服务。

1、在 resources 路径下添加配置文件 application.yml

spring:  cloud:    gateway:      routes:      - id: host_route        uri: http://localhost:8081        predicates:        - Path=/a/**        filters:        - StripPrefix=1      - id: host_route        uri: http://localhost:8082        predicates:        - Path=/b/**        filters:        - StripPrefix=1
  • id:固定,不同 id 对应不同的功能,可参考 官方文档

  • uri:目标服务地址

  • predicates:路由条件

  • filters:过滤规则

2、重启 Gateway 服务

3、测试

访问 http://localhost:8080/a/ 路由到 服务A http://localhost:8081/

访问 http://localhost:8080/b/ 路由到 服务B http://localhost:8082/

其他地址,例如 http://localhost:8080/a/user/all 路由到 服务A http://localhost:8081/user/all

配置服务的路由:编码方式

实现如上服务路由,还可以通过编码的方式实现。

1、删除配置文件 application.yml

2、修改 Application.java, 添加自定义路由配置

import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.gateway.filter.factory.StripPrefixGatewayFilterFactory;import org.springframework.cloud.gateway.route.RouteLocator;import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;import org.springframework.context.annotation.Bean;@SpringBootApplicationpublic class Application {    @Bean    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {        StripPrefixGatewayFilterFactory.Config config = new StripPrefixGatewayFilterFactory.Config();        config.setParts(1);        return builder.routes()                .route("host_route", r -> r.path("/a/**").filters(f -> f.stripPrefix(1)).uri("http://localhost:8081"))                .route("host_route", r -> r.path("/b/**").filters(f -> f.stripPrefix(1)).uri("http://localhost:8082"))                .build();    }    public static void main(String[] args) {        SpringApplication.run(Application.class, args);    }}

其他功能

http://cloud.spring.io/spring-cloud-gateway/single/spring-cloud-gateway.html

官方提供了大量的路由规则,比如Time、Host、Header 等等,同时也提供了大量的过滤器,比如AddRequestHeader、AddRequestParameter、AddResponseHeader 等等。仅通过简单的配置即可实现功能强大的网关服务。

© 著作权归作者所有,转载或内容合作请联系作者

 

你可能感兴趣的文章
Mysql——深入浅出InnoDB底层原理
查看>>
MySQL“被动”性能优化汇总
查看>>
MySQL、HBase 和 Elasticsearch:特点与区别详解
查看>>
MySQL、Redis高频面试题汇总
查看>>
MYSQL、SQL Server、Oracle数据库排序空值null问题及其解决办法
查看>>
mysql一个字段为空时使用另一个字段排序
查看>>
MySQL一个表A中多个字段关联了表B的ID,如何关联查询?
查看>>
MYSQL一直显示正在启动
查看>>
MySQL一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
查看>>
MySQL万字总结!超详细!
查看>>
Mysql下载以及安装(新手入门,超详细)
查看>>
MySQL不会性能调优?看看这份清华架构师编写的MySQL性能优化手册吧
查看>>
MySQL不同字符集及排序规则详解:业务场景下的最佳选
查看>>
Mysql不同官方版本对比
查看>>
MySQL与Informix数据库中的同义表创建:深入解析与比较
查看>>
mysql与mem_细说 MySQL 之 MEM_ROOT
查看>>
MySQL与Oracle的数据迁移注意事项,另附转换工具链接
查看>>
mysql丢失更新问题
查看>>
MySQL两千万数据优化&迁移
查看>>
MySql中 delimiter 详解
查看>>