|
|
@ -2,10 +2,15 @@ |
|
|
|
namespace blobt\airpc; |
|
|
|
|
|
|
|
use blobt\airpc\exception\ErrorRpcException; |
|
|
|
use Yii; |
|
|
|
|
|
|
|
class Client |
|
|
|
{ |
|
|
|
/** |
|
|
|
* 微服务节点配置 |
|
|
|
* @var array |
|
|
|
*/ |
|
|
|
public $servicesList; |
|
|
|
|
|
|
|
/** |
|
|
|
* 远程调用 |
|
|
|
* @param $service |
|
|
@ -14,16 +19,19 @@ class Client |
|
|
|
* @param $params |
|
|
|
* @return array |
|
|
|
*/ |
|
|
|
public static function remoteCall($service, $controller, $method, $params) : array |
|
|
|
public function remoteCall($service, $controller, $method, $params) : array |
|
|
|
{ |
|
|
|
try{ |
|
|
|
//找到service对应服务器
|
|
|
|
$serviceData = self::serviceData($service); |
|
|
|
$serviceData = $this->serviceData($service); |
|
|
|
//打包数据
|
|
|
|
$data = [ |
|
|
|
'controller' => $controller, |
|
|
|
'method' => $method, |
|
|
|
'params' => $params |
|
|
|
'params' => $params, |
|
|
|
'userToken'=> $params['jwt'] ?? null, //兼容旧rpc
|
|
|
|
'endPoint' => 'services', //兼容旧rpc
|
|
|
|
'rpcVersion' => 'v1' |
|
|
|
]; |
|
|
|
$data = json_encode($data); |
|
|
|
$length = strlen($data); |
|
|
@ -54,6 +62,18 @@ class Client |
|
|
|
if( $decodeData == false ) |
|
|
|
throw new ErrorRpcException('remote call result json decode failed', 88500005); |
|
|
|
|
|
|
|
//兼容旧rpc
|
|
|
|
if( isset($decodeData['code']) ){ |
|
|
|
$decodeData['statusCode'] = $decodeData['code']; |
|
|
|
unset($decodeData['code']); |
|
|
|
if( $decodeData['statusCode'] != 200 ){ |
|
|
|
if( isset($decodeData['data']['code']) ) |
|
|
|
$decodeData['errorCode'] = $decodeData['data']['code']; |
|
|
|
if( isset($decodeData['data']['info']) ) |
|
|
|
$decodeData['msg'] = $decodeData['data']['info']; |
|
|
|
unset($decodeData['data']); |
|
|
|
} |
|
|
|
} |
|
|
|
return $decodeData; |
|
|
|
}catch(\Throwable $e){ |
|
|
|
return ['statusCode'=>500,'errorCode'=>$e->getCode(),'msg'=>$e->getMessage()]; |
|
|
@ -66,13 +86,12 @@ class Client |
|
|
|
* @return array |
|
|
|
* @throws ErrorRpcException |
|
|
|
*/ |
|
|
|
private static function serviceData($service): array |
|
|
|
private function serviceData($service): array |
|
|
|
{ |
|
|
|
if( isset(Yii::$app->params['services']) ){ |
|
|
|
$servicesList = Yii::$app->params['services']; |
|
|
|
if( isset($servicesList[$service]) && !empty($servicesList[$service]) ){ |
|
|
|
$randomKey = array_rand($servicesList[$service],1); //随机取一个节点
|
|
|
|
return $servicesList[$service][$randomKey]; |
|
|
|
if( !empty($this->servicesList) ){ |
|
|
|
if( isset($this->servicesList[$service]) && !empty($this->servicesList[$service]) ){ |
|
|
|
$randomKey = array_rand($this->servicesList[$service],1); //随机取一个节点
|
|
|
|
return $this->servicesList[$service][$randomKey]; |
|
|
|
}else{ |
|
|
|
throw new ErrorRpcException('services information not found', 88500006); |
|
|
|
} |
|
|
|