分享一款非官方 Hyperf RPC 客户端 friendsofhyperf/jet

简单交代一下背景

在微服务盛行的当下,我们负责的业务也在近年往这个方向迁移,我们在技术选型的时候选择了 Hyperf(这个框架就不做介绍了),Hyperf 很优秀,提供了完整的微服务生态,而且还提供了一个适合非 Hyperf 环境的 RPC 客户端 Jet

新拆分的微服务都是基于新版的 PHP,但是有些旧项目(有多旧?PHP5.3 且没有 Composer 算不算)需要调用调用微服务,但是 Jet 官方需要依赖 Composer,还对 PHP 版本要求 7.2 以上,显然 PHP5.3 没法使用。

据消息,官方并无计划对低版本 PHP 做支持。

那没有办法,轮子不合适就造呗!于是有了它 friendsofhyperf/jet

  • 支持 PHP5.3+,7.2 以上建议用 hyperf/jet
  • 当然有 Composer 还是必须支持的

Github

github.com/friendsofhyperf/jet

安装

无 Composer 环境

  • 下载
wget https://github.com/friendsofhyperf/jet/archive/main.zip
  • 引入
require "[path]/src/bootstrap.php";

Composer 安装

composer require friendsofhyperf/jet

快速开始

注册

  • 注册服务
use FriendsOfHyperf\Jet\Metadata;
use FriendsOfHyperf\Jet\ServiceManager;
use FriendsOfHyperf\Jet\Registry\ConsulRegistry;
use FriendsOfHyperf\Jet\Transporter\GuzzleHttpTransporter;

$metadata = new Metadata('CalculatorService');
$metadata->setTransporter(new GuzzleHttpTransporter('127.0.0.1', 9502));
// 或者
$metadata->setRegistry(new ConsulRegistry(['uri' => 'http://127.0.0.1:8500']));

ServiceManager::register('CalculatorService', $metadata);

远程调用

  • 快速调用
use FriendsOfHyperf\Jet\ClientFactory;

$client = ClientFactory::create('CalculatorService');
var_dump($client->add(1, 20));
  • 通过自定义客户端调用
use FriendsOfHyperf\Jet\Client;
use FriendsOfHyperf\Jet\Transporter\GuzzleHttpTransporter;
use FriendsOfHyperf\Jet\Registry\ConsulRegistry;

/**
 * @method int add(int $a, int $b)
 */
class CalculatorService extends Client
{
    public function __construct($service = 'CalculatorService', $transporter = null, $packer = null, $dataFormatter = null, $pathGenerator = null)
    {
        $metadata = new Metadata($service);

        // Custom transporter
        $metadata->setTransporter(new GuzzleHttpTransporter('127.0.0.1', 9502));

        // Custom registry
        $metadata->setRegistry(new ConsulRegistry(['uri' => 'http://127.0.0.1:8500']));

        parent::__construct($metadata);
    }
}

$service = new CalculatorService;
var_dump($service->add(3, 10));
  • 通过门面调用
use FriendsOfHyperf\Jet\Facade;
use FriendsOfHyperf\Jet\ClientFactory;

/**
 * @method static int add(int $a, int $b)
 */
class Calculator extends Facade
{
    protected static function getFacadeAccessor()
    {
        // return JetClientFactory::create('CalculatorService');
        return 'CalculatorService';
    }
}

var_dump(Calculator::add(rand(0, 100), rand(0, 100)));

PHP 5.3

用参照 github.com/friendsofhyperf/jet/blo...

后记

希望能帮到和我一样现在旧项目调用 Hyperf 微服务的小伙伴,也欢迎 Star 和 Issue,把你的建议和需求告诉我。

本作品采用《CC 协议》,转载必须注明作者和本文链接
游离不2
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 3

怎么用啊。

3年前 评论

智能再laravel框架用吗?

3年前 评论
游离不2

@streetlamp 不限 Laravel 啊,用法上面都有说明。

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!