vlambda博客
学习文章列表

开源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控制台 -> 服务管理 -> 服务列表 功能下看到后台服务,如下图所示: 

开源API网关Fizz Gateway搭建

安装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;
        }
    }
}

使用路由转发请求到业务服务 在管理后台 -> 网关管理 -> 路由管理 功能下新增一个路由规则,通过以下配置将请求转发到我们的测试接口:

开源API网关Fizz Gateway搭建

开源API网关Fizz Gateway搭建

路由配置完成后,调用网关,获得接口响应,如下图所示:

测试成功,网关已将请求转发到naco-demo服务并获得了响应。

Tip: 对应服务分组名称一定要配置一致哦,不然会调用不到接口

结束

通过以上配置即可实现Fizz网关的转发。下一章节介绍Fizz的服务编排

更多文档

更多文档请参考 详细教程[1]

👆长按上方二维码 2 秒

参考资料

[1]

更多文档: http://www.fizzgate.com/guide/plugin/#%E6%A6%82%E8%BF%B0