PHP 微服务入门:基于 Hyperf 框架搭建轻量级微服务

分类:后端开发 时间:2026-02-24 浏览:1
1

一、微服务 VS 单体应用

表格

特性单体应用微服务
架构所有功能在一个应用中按业务拆分多个独立服务
部署整体部署独立部署
技术栈统一技术栈可异构(PHP/Java/Go)
复杂度高(服务治理)
适用场景小型项目 / 快速迭代中大型项目 / 高并发

二、Hyperf 框架优势

Hyperf 是基于 Swoole 的高性能 PHP 协程框架,适合微服务开发:

  • 协程驱动:高并发、低延迟;

  • 注解驱动:配置简洁,开发效率高;

  • 内置服务治理:服务注册 / 发现、配置中心、熔断降级;

  • 兼容 PSR 标准:易扩展、易集成。

三、微服务搭建步骤

1. 安装 Hyperf
# 创建项目
composer create-project hyperf/hyperf-skeleton user-service
cd user-service
# 启动服务
php bin/hyperf.php start
2. 服务拆分

拆分三个核心服务:

  • 用户服务(user-service):处理用户注册、登录、信息查询;

  • 商品服务(goods-service):处理商品管理、库存查询;

  • 订单服务(order-service):处理订单创建、支付、查询。

3. 服务注册与发现(基于 Nacos)
  1. 安装 Nacos(配置中心 + 服务注册中心):

docker run --name nacos -e MODE=standalone -p 8848:8848 -d nacos/nacos-server
  1. Hyperf 集成 Nacos:

composer require hyperf/nacos
  1. 配置config/autoload/nacos.php

return [
    'server' => [
        'host' => '127.0.0.1',
        'port' => 8848,
        'username' => 'nacos',
        'password' => 'nacos',
        'namespace' => '',
        'group_name' => 'DEFAULT_GROUP',
    ],
    'service' => [
        'name' => 'user-service',
        'ip' => '127.0.0.1',
        'port' => 9501,
        'enable' => true,
    ],
];
4. 接口调用

订单服务调用商品服务查询价格:

<?php
namespace App\Controller;

use Hyperf\Di\Annotation\Inject;
use Hyperf\Guzzle\ClientFactory;
use Hyperf\HttpServer\Annotation\AutoController;

#[AutoController]
class OrderController
{
    #[Inject]
    protected ClientFactory $clientFactory;

    /**
     * 创建订单
     */
    public function create()
    {
        $goodsId = 1;
        // 调用商品服务接口
        $client = $this->clientFactory->create();
        $response = $client->get('http://127.0.0.1:9502/goods/price', [
            'query' => ['goods_id' => $goodsId]
        ]);
        $price = json_decode($response->getBody()->getContents(), true)['data'];

        // 创建订单逻辑
        $order = [
            'order_no' => date('YmdHis') . rand(1000, 9999),
            'goods_id' => $goodsId,
            'price' => $price,
            'create_time' => date('Y-m-d H:i:s')
        ];

        return [
            'code' => 200,
            'message' => '订单创建成功',
            'data' => $order
        ];
    }
}
?>

四、服务熔断与降级(Sentinel)

  1. 安装 Sentinel 扩展:

composer require hyperf/sentinel
  1. 配置熔断规则:

return [
    'default' => [
        'grade' => \Hyperf\Sentinel\Constants\Grade::EXCEPTION_COUNT,
        'count' => 5, // 5次异常触发熔断
        'timeWindow' => 10, // 熔断10秒
    ],
];
  1. 使用注解实现熔断:

use Hyperf\Sentinel\Annotation\Sentinel;

#[Sentinel(resource: 'goods-price', fallback: 'goodsPriceFallback')]
public function getGoodsPrice($goodsId)
{
    // 调用商品服务
}

// 降级方法
public function goodsPriceFallback($goodsId)
{
    // 返回默认价格或提示信息
    return [
        'code' => 503,
        'message' => '商品服务暂时不可用',
        'data' => 0
    ];
}
文章链接:http://www.qwkf.cn//houduan/29.html
文章标题:PHP 微服务入门:基于 Hyperf 框架搭建轻量级微服务

相关阅读