Apache ShenYu分布式网关安装&部署&使用文档
前言
本文主要介绍分布式网关Apache ShenYu网关如何安装部署及使用,从0到1,图文并茂的保姆级教程,包括ShenYu网关源码下载,打包部署,客户端接入,请求路由,负载均衡等。
一、Apache ShenYu网关介绍
网关作为微服务架构中统一的流量入口,它扮演着多种关键角色,可以做请求路由和负载均衡,统一安全认证,服务注册与分发,灰度发布,请求熔断、限流、错误重试,让业务服务只需关心自己的业务逻辑,将通用的请求过程统一在网关层进行处理。
- 代理:支持Apache Dubbo,Spring Cloud,gRPC,Motan,SOFA,TARS,WebSocket,MQTT
- 安全性:签名,OAuth 2.0,JSON Web Token,WAF插件
- API治理:请求、响应、参数映射、Hystrix、RateLimiter插件
- 可观测性:跟踪、指标、日志记录插件
- 仪表板:动态流量控制,用户菜单权限的可视化后端
- 扩展:插件热插拔,动态加载
- 集群:NGINX、Docker、Kubernetes
- 语言:提供.NET,Python,Go,Java客户端用于API注册
二、ShenYu网关安装部署教程
环境准备
- 本地正确安装JDK1.8+
- 本地正确安装Git
- 本地正确安装Maven
- 本地正确安装MySQL
1. ShenYu网关源码下载
ShenYu安装方式有两种
- 下载官方编译后的包部署
- 下载源码自己打包编译部署
下载官方的包比较简单,但是因为网关一般为业务网关,要整合我们自己的业务的,如统一认证,限流,鉴权,请求重定向等,故推荐使用下载源码部署,可根据自己的需求自行编写代码。
使用git下载源码,并使用IDEA打开。
git clone https://github.com/apache/shenyu.git
打开后目录如下
ShenYu本质上还是一个Java语言编写的SpringBoot项目。
2. 执行sql创建数据库
我们采用mysql数据库存储网关的数据,需执行db/init/mysql/schema.sql脚本,会创建一个shenyu的数据库。
修改shenyu-admin模块下的application.yml文件,将spring.profiles.active改为mysql
然后修改application-mysql.yml文件,将数据库配置修改为自己的数据库信息。
3. 启动ShenyuAdminBootstrap,访问ShenyuAdmin
启动ShenyuAdminBootstrap的main()方法即可运行起ShenyuAdmin项目
访问 http://localhost:9095 , 默认用户名和密码分别为: admin
和 123456
,登录后请修改密码。
登录成功后进入如下界面。
shenyu的使用主要由插件构成,可以在BasicConfig->plugin中启用或修改插件配置,顺序等控制插件的运行。
4.启动ShenyuBootStrap
启动ShenyuBootstrapApplication中的main()方法。
启动后打印如下日志,该项目运行在9195端口,是一个纯后端的项目,是真正执行插件逻辑的网关项目,内部通过pom.xml文件引用了很多shenyu-spring-boot-starter下的插件,通过springbootstarter的自动装配引用插件。
至此,Shenyu的两个项目启动完毕,接下来将我们的项目接入即可。
二、WEB项目接入ShenYu网关
1. Http服务注册上报、负载均衡、错误重试:
创建一个自己的web项目,在pom.xml中添加依赖项:
<!-- shenyu网关上传服务状态 -->
<dependency>
<groupId>org.apache.shenyu</groupId>
<artifactId>shenyu-spring-boot-starter-client-springmvc</artifactId>
<version>2.6.1</version>
</dependency>
在application.yml中配置以下内容,密码修改为自己网关admin密码。
shenyu:
register:
registerType: http
serverLists: http://localhost:9095
props:
username: admin
password: your_password
client:
http:
props:
contextPath: /api/${spring.application.name}
appName: ${spring.application.name}
port: ${server.port}
在任一controller类上添加注解:
@ShenyuSpringMvcClient("/")
服务启动后即会上报当前服务ip:端口以及请求路径到shenyu-admin中。在插件列表->Proxy->Divide插件中即可看到服务情况。
服务启动会自动上报自动的ip:port到/api/demo选择器中,若启动多个服务会进行负载均衡,服务下线也会自动下线。
并可配置负载均衡策略以及错误重试策略。
2. 服务请求路径重写:
在插件列表中找到HttpProcess->Rewrite插件,添加一个Selector如下,uri -> startWith ->/api
在该选择器下添加规则,可在regex中配置要替换的内容,支持正则,在replace中配置替换后的内容,用户请求的url匹配到此规则时将会被重写到新的路径。
regex: ^/[^/]+/[^/]+/(.+)$ , replace: /$1
结果为将请求的前两层路径/替换为空,如/api/demo/getList替换为/getList。
通过postman调用请求接口
http://127.0.0.1:9195/api/demo/testThread/testOkhttp
将会重定向为->
http://127.0.0.1:{demo真实端口}/testThread/testOkhttp
ShenyuBootstrap项目打印日志:
至此,网关的自动注册,以及通过请求服务名自动重定向到对应的端口并实现负载均衡的功能即实现完毕。
三、打包部署至服务器中
我们进到shenyu-dist目录下,有shenyu-admin-dist和shenyu-bootstrap-dist,这两个包里包含了打包所需的所有文件。
1.打开命令行工具执行命令:
# 进入到shenyu-dist目录下
cd shenyu-dist
# 打包编译,指定激活profile为release
mvn clean -U package -P release
执行后若提示部分包不存在,可能是你下载的源码的项目版本为SNAPSHOT,相关依赖在maven中央仓库中不存在,需将整个项目maven install一下,将整个项目的依赖包安装到本地,这个过程时间比较长,需耐心等待。
执行后会生成如下两个文件
解压后目录如下
2.上传压缩包,运行脚本
我们看到解压后的目录类似apache-tomcat的目录,启动的脚本都在bin目录下,Windows下运行start.bat脚本,mac/linux下运行start.sh脚本,即可成功启动项目。
3.自定义修改源码
我们有时候会有一些定制化的需求,根据自己的需求自行修改源码。修改后对修改的那个模块执行mvn install,再执行上面的打包命令即可。
4.自定义插件
ShenYu主要由各种各样的插件组成实现复杂的功能,插件的形式类似过滤器,按照顺序依次执行业务逻辑,过程中可修改请求参数和返回参数,或统一认证、请求次数调用等,添加自己的业务逻辑。
具体实现方式官网有详细介绍,有需求者可自行研究。
四、总结
本篇文章从0到1帮助读者了解Shenyu网关,包含安装教程,使用教程,希望对读者有所帮助,留个赞再走,谢谢老板😁
作者:龙猫帝
原文链接:https://blog.csdn.net/chang_mao/article/details/136190617?spm=1001.2014.3001.5502
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。