要让ThinkPHP支撑微服务架构,需重构路由隔离、服务注册、跨域通信与独立部署:通过多应用模式拆分服务边界,各应用独享数据库配置;接入Consul或HTTP心跳实现服务注册发现;统一REST+JWT通信禁用DB直连;每个服务绑定唯一端口并HTTPS部署。

要让ThinkPHP框架真正支撑起微服务架构,必须突破单体应用惯性思维,从路由隔离、服务注册、跨域通信到独立部署全部重构。
拆分服务边界:用多应用模式替代单入口
ThinkPHP 6+ 支持多应用模式,这是微服务落地的第一步。在项目根目录执行 php think build:app api 创建独立的 api 应用模块,它会自动生成 app/api 目录及专属路由文件 app/api/route.php。
删除原 app/index/controller/Index.php 中所有与用户中心无关的逻辑,只保留基础健康检查接口;把订单、支付、通知等业务全部迁入对应的新应用目录。
【不要在多个应用间共用同一个数据库连接配置】 每个应用必须拥有独立的 config/database.php,否则事务隔离和读写分离将失效。
立即学习“PHP免费学习笔记(深入)”;
服务注册与发现:接入Consul或Nacos
方法一:使用官方扩展 topthink/think-consul
执行 composer require topthink/think-consul,然后在 app/api/middleware/ServiceRegister.php 中编写注册逻辑:
调用 Consul::register([ 'name' => 'user-service', 'address' => '127.0.0.1', 'port' => 8001 ]) 启动时向Consul注册自身地址。
方法二:轻量级HTTP心跳
在 app/api/command/Heartbeat.php 中定义命令类,每30秒向中心服务发送 POST /v1/health?service=user-service 请求,携带本机IP和端口。中心服务据此维护在线节点列表。
跨服务通信:统一用REST+JWT而非直接DB调用
第一步:禁用所有跨应用模型直连。删除 app/order/model/User.php 这类试图访问用户服务数据库的代码。
第二步:在订单服务中新建 app/order/service/UserClient.php,封装对用户服务的HTTP调用:
使用 think\Http 发起请求:$response = Http::withToken($jwt)->get('http://user-service/api/v1/users/123');
第三步:所有跨服务请求必须携带JWT令牌。用户服务验证通过后才返回数据,避免裸露内部接口。
这一步不做,服务间就变成裸奔状态,任何节点被攻破都会导致全链路数据泄露。
独立部署:每个服务绑定唯一端口并启用HTTPS
① 修改 app/api/command/ServerStart.php,设置监听端口为 8001;
② 在 app/api/config/app.php 中将 'debug' => false,关闭调试模式;
③ 使用 Nginx 反向代理,为 user-service 配置独立域名 user.api.example.com,强制跳转 HTTPS;
④ 执行 php think run -p 8001 启动用户服务,确保其不依赖其他服务进程即可运行。



















