Spring Boot微服务之网关
微服务包括了很多内容,其实一篇两篇文章根本说不清的。我觉得这篇系列教程将的特别好,在我刚开始接触微服务的时候,直接使用了springboot cloud alibaba,编写了两个模块,配合Nacos,实现了微服务的互相调用,其实再深入的考虑,就要到了服务之间的授权了。外部应用可以随意调用微服务,这样也不是好办法,而且微服务如何作为一个整体进行对外服务,也是一个问题,我刚开始其实就是使用了两个名称不同的模块,然后部署到服务器Tomcat之后,在前端页面,分别使用了不同的应用程序名称进行了服务调用。我觉得这样就脱离了微服务的本来意义。微服务,对外部应该是透明的,不能让人感觉这是一个微服务,而应该让人觉得,多个微服务构建起来的应该是一个整体,作为一个整体对外提供服务。于是,服务网关的概念就出现了。
1.springboot 网关gateway选型分析
2.在spring boot中集成微服务网关系统Spring Cloud Zuul
3.springcloud(十五):服务网关 Spring Cloud GateWay 入门 (纯洁的微笑出品,都是精品)
4.Spring Cloud Gateway:新一代API网关服务 (这篇讲了很多路由的配置方法,以及path变量的用法)
5.为什么是Spring Cloud Gateway
6.微服务从设计到部署(二)使用 API 网关 (这篇文章写的非常好)
7.微服务网关实战-Spring Cloud Gateway-自动路由配置 我觉得这篇文章写的也挺好的,入门学习也要,返回来复习知识也可以,都可以作为应用实践去做。
1.添加依赖
1 | <dependency> |
这里有一个问题,就是spring-cloud-starter-agteway和spring-boot-starter-web不兼容,所以spring-boot-starter-web需要添加下面的排除选项。
1 | <dependency> |
而且排除了依赖之后,项目的启动类就不能继承SpringBootServletInitializer了,即不能打包成war包了。也有人说,直接web模块中的spring-boot-starter-tomcat,也可以,但是排除之后,该如何使用web模块中的内容呢?没办法,网关就只做网关好了。
还可以这样引入依赖,使用webflux而不是web
1 | <dependencies> |
使用webflux代替starter-web,那么在使用thymealef模板时就需要做额外的工作了,这部分工作好像还挺多的,如果硬要上,可能会得不偿失。
1.学习SpringCloud之服务网关
2.Spring-cloud-gateway application not starting up (这里采用了排除依赖的方式)
3.gateway 与 spring-boot-starter-web 冲突问题
4.Spring-Cloud-gateway与Spring-boot-web模块出现冲突 (这里的评论中有一些解决方案)
5.gateway启动报错:org.springframework.cloud.gateway.config.GatewayAutoConfiguration required a bean of type ‘org.springframework.http.codec.ServerCodecConfigurer’ that could not be found
6.Spring Boot WebFlux + Thymeleaf reactive example
7.使用 Spring 5 的 WebFlux 开发反应式 Web 应用
2.编写application.yml配置文件
1 | server: |
上面这段配置的意思是,配置了一个 id 为 url-proxy-1的URI代理规则,路由的规则为:当访问地址http://localhost:8080/csdn/1.jsp
时,会路由到上游地址https://blog.csdn.net/1.jsp
。
1.SpringCloud gateway (史上最全) (这个确实很全,也提供了令牌桶算法这个新的值得研究的名词)
2.Spring Gateway概述
3.Spring Cloud学习笔记8-spring cloud gateway(第二代网关) (这个有了网关token的做法)
4.spring cloud gateway 2 深入了解 - filter (详细讲了啥事Filters)
5.SpringCloud组件: GateWay路由转发规则介绍(其实大家文章都差不多)
4.spring cloud gateway 2 深入了解 - filter (详细讲了啥是Filters,以及有哪些常用的过滤器)
3.path变量
需求如下:将路由 /{servername}/user/** 转发到 http://www.test/{servername}/user/**
,配置如下:
1 | app-name: gateway |
1.java - Spring Cloud Gateway 2.0转发路径变量
2.Spring Cloud(十四):Spring Cloud Gateway(过滤器) (这里实现了多个自定义的过滤器,以及全局的过滤器,对实现权限认证具有意义)
3.Spring Cloud Gateway—自定义过滤器
4.过滤器
过滤器主要有:StripPrefix、PrefixPath、Hystrix、LoadBalancerClient(负载均衡过滤器)
总共有如下的过滤器:
5.WebFlux
1.Spring Boot 2.0 WebFlux 教程 (一) | 入门篇
2.使用 Spring 5 的 WebFlux 开发反应式 Web 应用
3.Spring Boot WebFlux + Thymeleaf reactive example
6.动态路由
动态路由的意思就是说:一般来说作为生产上的通用网关要求有路由动态修改能力,不重启网关服务即可即使生效。无论是新增路由、或者是修改路由的过滤规则,添加过滤器都可以不重启网关生效。