簡單交代一下背景
在微服務盛行的當下,我們負責的業務也在近年往這個方向遷移,我們在技術選型的時候選擇了 Hyperf(這個框架就不做介紹了),Hyperf 很優秀,提供了完整的微服務生態,而且還提供了一個適合非 Hyperf 環境的 RPC 客戶端 Jet 。
新拆分的微服務都是基於新版的 PHP,但是有些舊專案(有多舊?PHP5.3 且沒有 Composer 算不算)需要呼叫呼叫微服務,但是 Jet 官方需要依賴 Composer,還對 PHP 版本要求 7.2 以上,顯然 PHP5.3 沒法使用。
據訊息,官方並無計劃對低版本 PHP 做支援。
那沒有辦法,輪子不合適就造唄!於是有了它 huangdijia/jet-client
- 支援 PHP5.3+,7.2 以上建議用
hyperf/jet
- 當然有 Composer 還是必須支援的
Github
安裝
無 Composer 環境
- 下載
wget https://github.com/huangdijia/jet-client/archive/main.zip
- 引入
require "[path]/src/bootstrap.php";
Composer 安裝
composer require huangdijia/jet-client
快速開始
註冊
- 註冊服務
JetServiceManager::register('CalculatorService', array(
// 註冊 transporter
JetServiceManager::TRANSPORTER => new JetCurlHttpTransporter('127.0.0.1', 9502),
// 或者註冊 service center,二選一即可
JetServiceManager::SERVICE_CENTER => new JetConsulServiceCenter('127.0.0.1', 8500),
));
- 批量註冊
$consulServiceCenter = new JetConsulServiceCenter($host, $port);
$services = $consulServiceCenter->getServices();
foreach ($services as $service) {
JetServiceManager::register($service, array(
JetServiceManager::SERVICE_CENTER => $consulServiceCenter,
));
}
遠端呼叫
- 快速呼叫
$client = JetClientFactory::create('CalculatorService');
var_dump($client->add(1, 20));
- 通過自定義客戶端呼叫
/**
* @method int add(int $a, int $b)
*/
class CalculatorService extends JetClient
{
public function __construct($service = 'CalculatorService', $transporter = null, $packer = null, $dataFormatter = null, $pathGenerator = null)
{
// 通過 service center 獲取 transporter
$serviceCenter = new JetConsulServiceCenter('127.0.0.1', 8500);
$transporter = $serviceCenter->getTransporter($service);
// 或者直接定義 transporter
$transporter = new JetCurlHttpTransporter('127.0.0.1', 9502);
parent::__construct($service, $transporter, $packer, $dataFormatter, $pathGenerator);
}
}
$service = new CalculatorService;
var_dump($service->add(3, 10));
- 通過門面呼叫
/**
* @method static int add(int $a, int $b)
*/
class Calculator extends JetFacade
{
protected static function getFacadeAccessor()
{
// return JetClientFactory::create('CalculatorService');
return 'CalculatorService';
}
}
var_dump(Calculator::add(rand(0, 100), rand(0, 100)));
後記
希望能幫到和我一樣現在舊專案呼叫 Hyperf 微服務的小夥伴,也歡迎 Star 和 Issue,把你的建議和需求告訴我。
本作品採用《CC 協議》,轉載必須註明作者和本文連結