spring cloud alibaba 版本对照
spring cloud alibaba 有严格的版本要求,所以一定要选对 spring cloud 版本,以及 spring boot 的版本
此系列文章的版本选取如下:
Spring Cloud Alibaba系列一:nacos 注册中心
Spring Cloud Alibaba系列二:openFeign 实现服务间的通信
Spring Cloud Alibaba系列三:集成Gateway实现路由管理
Spring Cloud Alibaba系列四:集成 seata 实现分布式事务
前两篇整合了nacos做为注册中心,openFeign实现服务间的通信,这篇记录整合Gateway做为整个路由的管理。
那么什么是Gateway?
网关(Gateway)又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。同层–应用层。
Gateway能用来干什么?
常见的作用有:
由于引入了Gateway,所以我们要把父项目的 pom文件里的 spring-boot-starter-web 的依赖删掉,依次在 customer,provider模块的pom文件里引入该依赖。否则启动 gateway 模块会报错。
>
>org.springframework.boot >
>spring-boot-starter-web >
>
创建方式同创建其他两个module一样。创建完成之后修改该模块的 pom 文件。需要注意的是,由于common模块引入了mybatis-plus的依赖,所以在gateway的pom文件里如果要添加common模块的依赖,需要移除掉mybatis-plus,否则启动会报DataSource异常。
pom.xml内容如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>alibabaartifactId>
<groupId>cn.xzfgroupId>
<version>0.0.1-SNAPSHOTversion>
parent>
<modelVersion>4.0.0modelVersion>
<artifactId>gatewayartifactId>
<version>0.0.1-SNAPSHOTversion>
<name>gatewayname>
<properties>
<java.version>1.8java.version>
properties>
<dependencies>
<dependency>
<groupId>cn.xzfgroupId>
<artifactId>commonartifactId>
<version>0.0.1-SNAPSHOTversion>
<exclusions>
<exclusion>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-gatewayartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-loadbalancerartifactId>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
project>
另外一个要注意的是,如果在 yml 的配置文件里,配置 routes.uri 为 lb:// 的形式,需要加上loadbalance的依赖,否则启动访问,会 503
<!-- Feign Client for loadBalancing -->
>
>org.springframework.cloud >
>spring-cloud-loadbalancer >
>
原因如下:
由于从springcloud2020版本开始,弃用了Ribbon,因此Alibaba在2021及之后版本的 nacos 中删除了 Ribbon 的 jar 包,因此无法通过 loadbalancer 路由到指定微服务。
dev 的配置文件内容如下
url:
base-url: 192.168.2.213
spring:
cloud:
nacos:
discovery:
#注册中心地址
server-addr: ${url.base-url}
username: nacos
password: nacos
config:
#命名空间
namespace: ${spring.profiles.active}
file-extension: yaml
#配置中心地址
server-addr: ${url.base-url}
gateway:
routes:
- id: provider
uri: lb://provider
predicates:
- Path=/provider/**
# 过滤器
filters:
# - StripPrefix=1 #转发之前去掉第一层路由
- id: customer
uri: lb://customer
predicates:
- Path=/customer/**
# 过滤器
filters:
# - StripPrefix=1 #转发之前去掉第一层路由
更多的配置可以参考 网关GateWay的使用详解、路由、过滤器、跨域配置
上述做完之后,就可以浏览器测试看看了。gateway 服务配置的端口号是8084
依次启动 gateway、provider、customer 服务。
浏览器访问
1、http://localhost:8082/provider/demo/test
2、http://localhost:8084/customer/demo/test
3、http://localhost:8084/provider/demo/test
8082 是正常访问 provider 服务的接口,8084 是 gateway 服务的端口,分别访问 customer,provider 的接口,发现都正确访问到了,自此集成gateway结束了。
实际上 gateway 还有更多的作用,这里只是简单的路由功能,而且路由功能里还可以传参数等操作,更多的功能值得你去挖掘。
上述就是 集成 gateway 的快速过程。
SpringCloudAlibaba系列demo (github.com)