开源API网关Fizz Gateway搭建
A Managerment API Gateway in Java . Fizz Gateway 是一个基于 Java开发的微服务网关,能够实现热服务编排、自动授权选择、线上服务脚本编码、在线测试、高性能路由、API审核管理、回调管理等目的,拥有强大的自定义插件系统可以自行扩展,并且提供友好的图形化配置界面,能够快速帮助企业进行API服务治理、减少中间层胶水代码以及降低编码投入、提高 API 服务的稳定性和安全性
接着上一篇,本章节来动手实践搭建Fizz-Gateway网关
Fizz-Gateway安装搭建
安装依赖 :
-
Redis 2.8或以上版本 -
MySQL 5.7或以上版本 -
Nacos服务注册中心
安装MySQL
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.30-1.el6.x86_64.rpm-bundle.tar
# 解压
tar -xvf mysql-5.7.30-1.el6.x86_64.rpm-bundle.tar
# 安装
sudo yum install mysql-community-{server,client,common,libs}-*
# 启动
sudo service mysqld start
[root@localhost ~]# sudo service mysqld start
Initializing MySQL database: [ OK ]
Starting mysqld: [ OK ]
初始密码
sudo grep 'temporary password' /var/log/mysqld.log
使用初始密码登录
mysql -uroot -p
修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
退出登录
quit
安装Redis
# 下载解压并编译
wget http://download.redis.io/releases/redis-6.0.8.tar.gz
tar xzf redis-6.0.8.tar.gz
cd redis-6.0.8
make && make install
# 修改redis.conf
配置redis访问密码 requirepass "123456"
# 启动redis
src/redis-server
# 客户端连接测试
src/redis-cli
redis> auth 123456
redis> set foo bar
OK
redis> get foo
"bar"
安装Nacos
nacos是微服务架构里一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台,类似于spring cloud官方的config组件。
# 下载安装包
wget https://github.com/alibaba/nacos/releases/download/1.4.1/nacos-server-1.4.1.tar.gz
# 解压
tar -zxvf nacos-server-1.4.1.tar.gz
若配置了自定义数据,则需要在数据源处创建名为nacos的数据库,并且执行conf下面的nacos-mysql.sql生成基本的数据库架构
# 编辑配置文件
vi nacos/conf
# 添加数据库配置
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=123456
4、启动服务
cd nacos/bin
# standalone模式启动
sh startup.sh -m standalone
5、进行访问
访问地址:localhost:8848/nacos 账号/密码:nacos/nacos
结果如下所示
安装Fizz
安装fizz-manager-professional
从github的releases(https://github.com/wehotel/fizz-gateway-community/releases) 下载 fizz-manager-professional 安装包. PS 该安装包未开源
这里安装最新版1.5.0。
解压fizz-manager-professional-1.5.0.zip安装包 首次安装执行fizz-manager-professional-1.5.0-mysql.sql数据库脚本,从低版本升级至高版本选择执行update目录下对应升级脚本
修改application-prod.yml文件,启用Nacos注册中心,Nacos配置如下:
nacos:
discovery:
# if use Nacos discovery set this flag to true
enabled: true # 设置为true启用Nacos注册中心
# need replace
server-addr: 127.0.0.1:8848 # 设置Nacos服务的IP地址以及端口
# need replace
namespace: public # 设置服务使用的命名空间
register:
group-name: fizz-gateway
修改MySQL和Redis连接
spring:
datasource:
url: jdbc:mysql://localhost:3306/fizz_manager?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
# 数据库用户名
username: root
# 数据库密码
password: 123456
redis:
# redis配置
database: 9
host: localhost
password: 123456
port: 6379
ssl: false
配置完成后启用fizz-manager-professional服务
-
Linux启动执行 chmod +x boot.sh 命令给boot.sh增加执行权限;执行 ./boot.sh start 命令启动服务,支持 start/stop/restart/status命令
-
Windows启动 执行.\boot.cmd start 命令启动服务,支持 start/stop/restart/status命令
启动完成后可在Nacos控制台 -> 服务管理 -> 服务列表 功能下看到后台服务,如下图所示:
安装fizz-gateway-community社区版
下载fizz-gateway-community的最新代码
修改application.yml配置文件,启用Nacos注册中心,Nacos配置如下:
nacos:
config:
# if use Nacos config set this flag to true
enabled: false
# need replace
server-addr: 127.0.0.1:8848
auto-refresh: true
group: fizz-gateway
data-id: application
type: PROPERTIES
# need replace
namespace: public
discovery:
# if use Nacos discovery set this flag to true
enabled: true # 设置为true启用Nacos注册中心
# need replace
server-addr: 127.0.0.1:8848 # 设置Nacos服务的IP地址以及端口
# need replace
namespace: public # 设置服务使用的命名空间
auto-register: true
register:
group-name: fizz-gateway
redis配置需与管理后台一致
-
执行 ./boot.sh start 命令启动服务,支持 start/stop/restart/status命令
IDE启动:
本地clone仓库上的最新代码 将项目fizz-gateway导入IDE 导入完成后设置项目启动配置及修改application.yml配置文件里nacos、redis(redis配置需与管理后台一致)的配置,在VM选项中加入-Denv=dev
http://127.0.0.1:8600/proxy/[服务名]/[API Path]
网关的默认上下文为/proxy, 可以通过修改以下步骤修改, 可配置为空或其它值
修改fizz-manager-professional的application.yml配置
gateway:
prefix: /proxy
修改fizz-gateway-community的application.yml配置
gateway:
prefix: /proxy
网关集群
如果网关部署了多个节点可配置通过nginx做负载均衡,参考配置如下:
修改nginx.conf文件,在http下添加upstream
upstream fizz {
server 10.10.1.1:8600;
server 10.10.1.2:8600;
server 10.10.1.3:8600;
}
location /proxy/ {
# 省略...
proxy_pass http://fizz;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
这里的fizz 跟 upstream后面的名字对应。第2行的请求头X-Forwarded-For是记录代理过程做的配置,通过配置此请求头fizz可获取到调用方的IP。
业务服务调用示例
我们将一个测试服务naco-demo注册到Nacos配置中心中,如下图所示:eeee naco-demo提供了一个测试接口,接口实现如下:
@RestController
@RequestMapping("/api")
public class DemoController {
@GetMapping("/echo")
public Result echo(@RequestParam("msg") String msg) {
Result result = new Result();
result.setMsg(msg);
return result;
}
static class Result {
private Integer code = 0;
private String msg;
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
}
使用路由转发请求到业务服务 在管理后台 -> 网关管理 -> 路由管理 功能下新增一个路由规则,通过以下配置将请求转发到我们的测试接口:
路由配置完成后,调用网关,获得接口响应,如下图所示:
测试成功,网关已将请求转发到naco-demo服务并获得了响应。
Tip: 对应服务分组名称一定要配置一致哦,不然会调用不到接口
结束
通过以上配置即可实现Fizz网关的转发。下一章节介绍Fizz的服务编排
更多文档
更多文档请参考 详细教程[1]
参考资料
更多文档: http://www.fizzgate.com/guide/plugin/#%E6%A6%82%E8%BF%B0