suframe/think

suframe thinkphp 6 扩展

1.0.10 2020-07-27 10:08 UTC

This package is auto-updated.

Last update: 2024-09-29 05:02:44 UTC


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一层层传递并生成统一的日志。

我只能想出一个折中的方法,只是这样业务就强绑定,开发体验不是很好。

  1. 在前端网关转发时,后端服务的controller可以从header中获取--request_id-- 作为链路请求标识。
  2. RPC接口约定好,定义接口时,最后一个参数定义$ext = [], 用于扩展
  3. 在controller或其他业务代码中调用RPC接口时, $rpc->method([业务参数], $this->getRpcExtParams()), 其中$this->getRpcExtParams()就是系统默认增加的额外参数,当然前提是你控制器要use suframe\think\traits\ControllerHelper;
  4. 日志,tp6的日志比较灵活,意思是需要自己编写,包括请求日志等你自己想获取的

已经反馈社区看如何处理