美文网首页Java 杂谈互联网科技Spring-Boot
服务网关 Spring Cloud Gateway 的应用

服务网关 Spring Cloud Gateway 的应用

作者: Java技术剑 | 来源:发表于2018-07-04 14:31 被阅读52次

    如何启动 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 等等。仅通过简单的配置即可实现功能强大的网关服务。

    欢迎工作一到五年的Java工程师朋友们加入Java架构开发:744677563

    本群提供免费的学习指导 架构资料 以及免费的解答

    不懂得问题都可以在本群提出来 之后还会有职业生涯规划以及面试指导

    相关文章

      网友评论

        本文标题:服务网关 Spring Cloud Gateway 的应用

        本文链接:https://www.haomeiwen.com/subject/tmpeuftx.html