项目笔记 API网关 二十八 网关组件工程模块合并 hiriki 2023-06-04 2023-06-05 通过合并网关六个模块 【admin、center、core、assist、engine、sdk】 到统一服务下管理,完成 API 网关的多模块组装,为后续功能迭代做铺垫。
模块服务 截止到本章整个 API 网关的核心流程就已经全部开发完成了,并可以完成基本测试调用。从本章开始将是对网关功能的细节迭代,因为这些内容会涉及到对网关六个模块 【admin、center、core、assist、 engine、sdk】的开发。所以到本章开始把整个工程合并,后续的章节将按照创建分支的方式进行开发。
目前网关系统的六大模块工程,主要分为三个大的部分在运行:
网关算力:由 api-gateway-core、api-gateway-assist、api-gateway-engine 组成,core 提供算力、assist 处理封装、engine 镜像打包和启动。
管理中心:由 api-gateway-admin、api-gateway-center 组成,admin 后台运营、center 注册中心。
接口上报:由 api-gateway-sdk 提供,它被应用系统引入,在应用系统中以注解的方式提取应用 RPC 接口信息并向注册中心发送。
模块合并
合并的方式是通过 IDEA 创建出一个多模块工程,再分别把网关各个模块的最新代码复制进去。
admin-管理后台、assist-助手、center-注册中心、core-核心通信、engine-启动引擎、sdk-上报接口、test-RPC测试工程
doc 包含了最新的 sql 文件、nginx 配置、postman 接口等内容,后续一些必备的配置也会放到这里。
此外,api-gateway-center、api-gateway-engine,都是 Java 的部署工程,已经在工程下提供好了 Docker 配置,非常容易上手部署。
部署文件 api-gateway-center 打包镜像——Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 FROM openjdk:8 -jre-slimMAINTAINER RayENV PARAMS="" ENV TZ=PRCRUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone ADD target/api-gateway-center.jar /api-gateway-center.jar ENTRYPOINT ["sh" ,"-c" ,"java -jar $JAVA_OPTS /api-gateway-center.jar $PARAMS " ]
部署镜像——start.sh
1 2 3 4 5 6 7 docker run \ --name Nginx \ -d \ -v /Users/ray/Source/api-gateway/api-gateway/doc/data/html:/usr/share/nginx/html \ -v /Users/ray/Source/api-gateway/api-gateway/doc/data/nginx/nginx.conf:/etc/nginx/nginx.conf \ -p 8090:80 \ nginx
api-gateway-engine 打包镜像——Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 FROM openjdk:8 -jre-slimMAINTAINER RayENV PARAMS="" ENV TZ=PRCRUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone ADD target/api-gateway-engine.jar /api-gateway-engine.jar ENTRYPOINT ["sh" ,"-c" ,"java -jar $JAVA_OPTS /api-gateway-engine.jar $PARAMS " ]
部署镜像——start-01.sh
1 2 3 4 5 6 7 8 9 docker run -p 8902:8902 -p 7397:7397 \ -e PARAMS=" --sever.port=8902 --api-gateway.address=http://10.17.91.135:8901 --api-gateway.groupId=10001 --api-gateway.gatewayId=api-gateway-g4 --api-gateway.gatewayName=电商配送网关 --api-gateway.gatewayAddress=10.17.91.135:7397" \ --name api-gateway-engine-01 -d api-gateway-engine:1.0.0
部署镜像——start-02.sh
1 2 3 4 5 6 7 8 9 docker run -p 8903:8903 -p 7398:7398 \ -e PARAMS=" --sever.port=8903 --api-gateway.address=http://10.17.91.135:8901 --api-gateway.groupId=10001 --api-gateway.gatewayId=api-gateway-g4 --api-gateway.gatewayName=电商配送网关 --api-gateway.gatewayAddress=10.17.91.135:7398" \ --name api-gateway-engine-02 -d api-gateway-engine:1.0.0
部署镜像——start-03.sh
1 2 3 4 5 6 7 8 9 docker run -p 8904:8904 -p 7399:7399 \ -e PARAMS=" --sever.port=8904 --api-gateway.address=http://10.17.91.135:8901 --api-gateway.groupId=10001 --api-gateway.gatewayId=api-gateway-g4 --api-gateway.gatewayName=电商配送网关 --api-gateway.gatewayAddress=10.17.91.135:7399" \ --name api-gateway-engine-03 -d api-gateway-engine:1.0.0
网关算力可以部署多套,所以这里直接提供了 start-01.sh、start-02.sh、start-03.sh 三个部署文件,方便测试网关算力的集群能力。
Nginx 1 2 3 4 5 6 7 docker run \ --name Nginx \ -d \ -v /Users/ray/Source/api-gateway/api-gateway/doc/data/html:/usr/share/nginx/html \ -v /Users/ray/Source/api-gateway/api-gateway/doc/data/nginx/nginx.conf:/etc/nginx/nginx.conf \ -p 8090:80 \ nginx
容器部署 整个 API 网关所需的基础环境包括:MySQL、Zookeeper、Nginx、Redis:
这里 MySQL 和 Redis 都是使用云服务器上的。
在有了基础配置以后,就可以通过 api-gateway 各个模块下的容器部署配置,来启动工程了。
测试验证
可以看到测试通过,三次请求分别打到了不同的服务上。
思考 一些优化想法 目前 assist 服务注册以及 sdk 接口上报都是利用 cn.hutool.http.HttpUtil#post
向网关中心 api-gateway-center 接口构建请求,后续可以优化为 MQ 实现异步更新(当注册网关服务或者上报接口方法时,向 MQ 发送一条信息,注册中心监听到该信息之后进行对应的处理),这样也就避免了因为网络问题导致请求无法正常接收处理的问题,不过也会引入一些关于 MQ 的问题(比如消息重复消费或者消息丢失等