如何用 go-micro-php-consul 實現簡單的微服務?

首先我們用 go-micro 構建一個服務。

其次定義我們的服務:Register 和 User。

然後生成執行下面的命令,你會發現在 proto 文件中多出兩個文件,這個在後面會用到。

寫業務邏輯,修改 handle/user.go 文件

最後修改 main.go 文件,服務發現使用時 consul。

簡單處理並啓動 consul。

啓動 consul 的 ui。首先打開 http://192.168.10.100:8500/ui/dc1/services,

然後寫 hyperf 的代碼。按照官方文檔安裝框架,安裝的時候 rpc 需要選擇 grpc,

第一次啓動的時候官方會要求修改一些 php.ini 的參數,大家按照要求走就是了。這部分的流程自己參照官方文檔,至於一些擴展的安裝可以谷歌或者百度。安裝好框架之後再根目錄下面新建一個 grpc 和 proto 的目錄,把 go-micro 裏面 user.proto 文件複製到 hyperf 項目的 proto 的目錄之下。然後在目錄下執行命令。

執行成功之後會發現在 grpc 目錄下多出兩個文件夾。接下來我們開始編寫 client 的代碼,在 hyperf 項目的 app 目錄下新建一個 Grpc 的目錄並且新建一個 UserClient.php 的文件。

新建一個路由 Router::addRoute(['GET', 'POST', 'HEAD'], '/grpc', 'App\Controller\IndexController@grpc');編寫控制器

這時候還需要吧根目錄下的 grpc 目錄加載進來,修改 composer.json 文件。

然後執行 composer dump-autoload 命令,並啓動 hyperf 項目,打開瀏覽器輸入 http://192.168.10.100:9501/grpc 回車,我們就能看到結果了。這時候我們會發現一個問題,那就是 consul 在 client 端壓根沒用到,在代碼中我們還是需要指明我們的端口號。然後再看看官方文檔其實是支持 consul 的,那麼將代碼改造下。

在 app 下新建一個 Register 的目錄創建一個文件 ConsulServices.php,然後開始編寫服務發現的代碼,安裝 consul 包以後,由於官方提供的 consul 包沒有文檔,所以需要自己去看源代碼。官方在 consul 提供的 api 上面做了簡單的封裝,如 KV、Health 等,在實例化話的時候需要穿一個客戶端過去。下面提供一個簡單的實例。

這時候你會發現一個問題如果每次請求都去請求一次,必然會給 consul 造成很大的負荷。這時候我們用 swoole 框架可以在每次 swoole 啓動的時候去請求一次,然後把服務發現的信息存起來。修改配置文件 server。

改造一下原來的控制器

最後我們重啓服務,這時候然後刷新瀏覽器。你會發現一個簡單的基於 go rpc server 和 php client 的微服務就搭建完成了。當然了這時候還沒有心跳機制,hyperf 官網提供了一個定時器的功能,我們定時去刷服務發現就好了。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/yyTyXExMnfPjq5u6MlcOTg