suframe / think
suframe thinkphp 6 扩展
Requires
- topthink/think-swoole: ^3.0
Requires (Dev)
- swoole/ide-helper: @dev
README
开发交流QQ群:647344518 立即加群
使用thinkphp6作为suframe服务后端的扩展库,使thinkphp6具备轻量级微服务功能
本库基于https://github.com/top-think/think-swoole **(v3.0.5以上版本)**进行扩展,基本保持原有用法不变。
本系统仅针对小型业务系统,大中规模的微服务架构需要许多工具和系统支撑,不在此项目服务范围内,因此请勿纠结于鉴权、权限流降级等问题。
有兴趣的朋友可以阅读这篇新手引导文章:https://www.zacms.com/index.php/archives/566/
设计
- 通过composer create-project topthink/think创建的为一个独立项目
- 一个项目为一个服务提供者
- 一个服务提供者可以提供多个接口
- 自动注册接口到注册中心
- 有新服务注册,自动更新client列表
- api网关代理
- Swoole Tracker集成
- 待办:日志及链路追踪
安装使用
composer create-project topthink/think server1
cd server1
composer require suframe/think
修改config/swoole.php
rpc.server.enable => true,
rpc.server.port => 自定义端口,
rpc.client => include(__DIR__ . '/suframeRpcClient.php');
修改config/suframeProxy.php
path => '/admin' 为你想注册的api网关根路径,例如/admin,
name => 'admin' 为你服务的名称(只能是英文字母)
registerServer => [
'ip' => '127.0.0.1' //选一个应用作为服务注册的应用,这里就选第一个
'port' => 8091
]
快速体验
https://github.com/suframe/think-demo
有兴趣的可以去看如何从零搭建自己的服务:https://www.zacms.com/index.php/archives/566/
API网关
服务拆分后,API分布较为分散,需要统一对外暴露地址。打开app/middleware.php文件,增加
return [
\suframe\think\middlewares\Gateway::class
...
]
访问:(网关端口和地址目前是你用于注册rpc的地址) http://127.0.0.1:8090/apis/goods/hello/my http://127.0.0.1:8090/apis/goods/hello/my
服务监控
使用swoole_tracker http://base.swoole-cloud.com/1214079,免费的 安装简单,无侵入。按照手册操作即可
需要注意的是swoole_tracker免费版的额度较低,我在一个压力测试后就用完了。有钱的大佬可以购买私有化部署,起步价1万
分布式日志
微服务化开发,如果没有统一的日志进行链路追踪会很痛苦,不过很巧的是,think-swoole的扩展性还有待提高,目前还没有办法将一个请求的request_id一层层传递并生成统一的日志。
我只能想出一个折中的方法,只是这样业务就强绑定,开发体验不是很好。
- 在前端网关转发时,后端服务的controller可以从header中获取--request_id-- 作为链路请求标识。
- RPC接口约定好,定义接口时,最后一个参数定义$ext = [], 用于扩展
- 在controller或其他业务代码中调用RPC接口时, $rpc->method([业务参数], $this->getRpcExtParams()), 其中$this->getRpcExtParams()就是系统默认增加的额外参数,当然前提是你控制器要use suframe\think\traits\ControllerHelper;
- 日志,tp6的日志比较灵活,意思是需要自己编写,包括请求日志等你自己想获取的
已经反馈社区看如何处理