Laravel 5 使用 Grpc 構建的微服務

Stone007發表於2019-08-06

最近有用微服務相關的專案,所以記錄一下。
服務端採用的是 NodeJS 程式碼就不貼了(主要是計算DY簽名的),這裡貼一下 .proto 檔案的程式碼

proto 檔案

syntax = "proto3";

package app.grpc; // 包名

// 定義通用的 Grpc 服務
service CommonService {
    // 處理請求
  rpc handle ( Request ) returns ( Response ) {}
}

// 定義通用的 Grpc 請求體
message Request {
    int32 serialize = 1;
    bytes request = 2;
}

// 定義通用的 Grpc 響應體
message Response {
    bytes response = 1;
}

生成 PHP端的類庫檔案

需要依賴 proto 支援,不知道怎麼安裝的可以到這篇文章看看 https://www.jianshu.com/p/1d550bb8509d

執行以下命令

protoc --proto_path=./ --php_out=./ --grpc_out=./ --plugin=protoc-gen-grpc=/usr/local/bin/grpc_php_plugin ./server/service.proto

我的 .proto 檔名稱是 service 放在 server 目錄下。
執行完命令之後,會在根目錄生成 App 和 GPBMetadata 資料夾。

在laravel中使用

1,複製 App目錄下的 Grpc 資料夾到你的 laravel 專案的 app 目錄下。

2,複製 GPBMetadata 資料夾到你的 laravel 專案根目錄

3,修改 composer.json 檔案的 classmap 欄位加上 GPBMetadata

...
    "autoload": {
        "classmap": [
            "database/seeds",
            "database/factories",
            "GPBMetadata"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    }
...

4,執行 composer dump-autoload 命令重新載入類庫

5,現在就可以在控制器裡面使用引入的類檔案了。use App\Grpc\YourClassName 在檔案頂部即可引入。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章