分享一款非官方 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 协议》,转载必须注明作者和本文链接
怎么用啊。
智能再laravel框架用吗?
@streetlamp 不限 Laravel 啊,用法上面都有说明。