分享一款非官方 Hyperf RPC 客戶端 huangdijia/jet-client

遊離不2發表於2020-11-05

簡單交代一下背景

在微服務盛行的當下,我們負責的業務也在近年往這個方向遷移,我們在技術選型的時候選擇了 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

github.com/huangdijia

安裝

無 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 協議》,轉載必須註明作者和本文連結

相關文章