準備工作
1、所需類庫
2、工具
下載consul for linux,解壓後就是一個可執行文件,直接mv到/usr/bin/consul
新建一個consul文件夾,在裏面新建一個data文件夾和etc文件夾,data文件夾用於存放consul的數據文件,etc用於存放配置文件
切換到etc文件夾,新建一個web.json文件,內容如下:
{
"service": {
//這裏寫服務的ID,必須唯一
"id": "CalculatorService",
//這裏寫服務名稱,一般也是ID名,非唯一
"name": "CalculatorService",
//註冊服務,服務在哪臺服務器上,就填寫那臺服務器IP,這裏我填寫server2的ip,因爲是server2提供服務給server1調用
"address": "server2.ip.server2.ip",
//隨便寫
"tags": [
"webapi"
],
//同上,服務也有端口,就填寫那臺服務器提供的端口,這裏填寫server2的端口
"port": 9502
}
}
回到consul目錄,啓動consul,其中-config-dir指定剛剛的配置目錄,-data-dir指定存放數據的目錄
consul agent -dev -ui -config-dir=./etc -data-dir=./data -client=0.0.0.0
或者
consul agent -dev -ui -data-dir=./data -client=0.0.0.0
client=0.0.0.0這裏需要注意下,網上一般的都是127.0.0.1,如果寫成127.0.0.1同樣可以運行,但是沒辦法在外網訪問consul的UI界面,所以這裏改成0.0.0.0
在瀏覽器輸入IP:8500,就可以看到consul安裝成功
3、Provider的配置
1、服務提供類
<?php namespace App\Rpc; use Hyperf\RpcServer\Annotation\RpcService; /** * @RpcService(name="CalculatorService",protocol="jsonrpc-http",server="jsonrpc-http") */ class CalculatorService implements CalculatorServiceInterface { public function add(int $a, int $b): int { return $a + $b; }
public function minus(int $a, int $b): int { return $a - $b; } }
2、接口類
namespace App\Rpc; interface CalculatorServiceInterface { public function add(int $a, int $b): int; public function minus(int $a, int $b): int; }
... [ 'name' => 'jsonrpc-http', 'type' => Server::SERVER_HTTP, 'host' => '0.0.0.0', 'port' => 9802, 'sock_type' => SWOOLE_SOCK_TCP, 'callbacks' => [ SwooleEvent::ON_REQUEST => [Hyperf\JsonRpc\HttpServer::class, 'onRequest'], ], ], ],
3、Consumer 的配置
1、接口類
namespace App\Rpc; interface CalculatorServiceInterface { public function add(int $a, int $b): int; public function minus(int $a, int $b): int; }
2、配置文件 services.php
3、調用
namespace App\Controller; use App\Rpc\CalculatorServiceInterface; use Hyperf\Di\Annotation\Inject; use Hyperf\HttpServer\Annotation\AutoController; /** * @AutoController() */ class IndexController extends AbstractController { /** * @Inject() * @var CalculatorServiceInterface */ private $calculatorService; public function rpc() { return $this->calculatorService->minus(10,2); } }
4、使用consul
如果需要使用 consul來管理服務,則需要做如下操作
1).修改Provider具體的服務類,註解添加屬性 publishTo
1
2
|
/** * @RpcService(name="CalculatorService",protocol="jsonrpc-http",server="jsonrpc-http",publishTo="consul") */ |
2).Provider服務發佈
php bin/hyperf.php vendor:publish hyperf/consul
執行完畢後會形成一個配置文件 consul.php
3).Conusmer修改配置
'consumers' => [ [ 'name' => 'CalculatorService', 'service' => \App\Rpc\CalculatorServiceInterface::class,
registry' => [
'protocol' => 'consul',
'address' => 'http://127.0.0.1:8500',//對應Provider 中 consul.php配置項 ]
],
],
];
4).重新啓動Provider和Consumer