Compare commits

..

No commits in common. "7e30cfa91511693a25012b87fe2eaa428eecdc8e" and "60bc5943ff71ea815057b8aeeca80e1e201a83e2" have entirely different histories.

10 changed files with 279 additions and 678 deletions

771
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -45,9 +45,5 @@ return [
'local' => true,
'base_uri' => env('RPC_PAYMENT_URI','http://payapi.dev.haowumc.com'),
],
'wx-server' => [
'local' => true,
'base_uri' => env('RPC_WX_SERVER_URI', 'http://sapi.in.haowumc.com'),
],
],
];

View File

@ -7,7 +7,6 @@ use JsonRpc\Exception\RpcServerException;
use JsonRpc\Server\JsonRpcBase;
use Monolog\Handler\StreamHandler;
use Monolog\Logger;
use Psr\Log\LoggerInterface;
class Client extends JsonRpc
{
@ -28,11 +27,6 @@ class Client extends JsonRpc
*/
protected $http;
/**
* @var LoggerInterface
*/
protected $logger;
/**
* which server rpc call choose
* @var array
@ -45,11 +39,6 @@ class Client extends JsonRpc
$this->id = 1;
}
public function setLogger($logger)
{
$this->logger = $logger;
}
/**
*
* @param $k
@ -71,7 +60,6 @@ class Client extends JsonRpc
/**
* @param $name
* @param $arguments
* @param $options []
* @throws RpcServerException
* @return array
*/
@ -104,23 +92,19 @@ class Client extends JsonRpc
*/
protected function post($payload, $options = [])
{
$uri = 'rpc/json-rpc-v2.json?app=' . $this->config['app'];
$requestId = isset($_SERVER['HTTP_X_REQUEST_ID']) ? $_SERVER['HTTP_X_REQUEST_ID'] : 'nginx-config-err';
try {
$headers = [
'X-Client-App' => $this->config['app'],
'X-Request-Id' => $requestId,
];
$this->logger && $this->logger->info("client_request", array_merge($this->server_config, $payload));
$resp = $this->http->request('POST', $uri, array_merge([
app('rpc.logger')->info("client_request", array_merge($this->server_config, $payload));
$resp = $this->http->request('POST', 'rpc/json-rpc-v2.json', array_merge([
'headers' => $headers,
'json' => $payload,
], $options));
} catch (ServerException $e) {
$ex = new RpcServerException(self::ErrorMsg[JsonRpc::Rpc_Error_Internal_Error], JsonRpc::Rpc_Error_Internal_Error);
if (function_exists('env') && env("APP_DEBUG") == true) {
if (env("APP_DEBUG") == true) {
$resp = $e->getResponse();
$ex->setResponse($e->getResponse());
}
throw $ex;
@ -128,7 +112,7 @@ class Client extends JsonRpc
try {
$body = \GuzzleHttp\json_decode($resp->getBody(), true);
$this->logger && $this->logger->info("client_response", $body);
app('rpc.logger')->info("client_response", $body);
if (empty($body)) {
throw new RpcServerException('http response empty', JsonRpc::Rpc_Error_System_Error);
}
@ -141,9 +125,9 @@ class Client extends JsonRpc
return $body['result'];
} catch (\InvalidArgumentException $e) {
$this->logger && $this->logger->error('client_decode_error', array_merge($this->server_config, $payload));
app('rpc.logger')->error('client_decode_error', array_merge($this->server_config, $payload));
$ex = new RpcServerException($e->getMessage(), JsonRpc::Rpc_Error_Parse_Error);
if (function_exists('env') && env("APP_DEBUG") == true) {
if (env("APP_DEBUG") == true) {
$ex->setResponse($resp);
}
throw $ex;

View File

@ -40,7 +40,7 @@ class Security
*/
private function isClientIPPermitted($ip)
{
if (app()->environment('develop', 'local')) {
if (!app()->environment('production', 'staging')) {
return true;
}

View File

@ -11,10 +11,7 @@ use Monolog\Logger;
class BaseServiceProvider extends ServiceProvider
{
protected $logger;
public function boot()
{
public function boot(){
Request::setTrustedProxies([
//pod network
'172.20.0.0/16',
@ -32,26 +29,26 @@ class BaseServiceProvider extends ServiceProvider
protected function setupConfig()
{
$source = realpath(__DIR__ . '/../../config/rpc.php');
$this->app->configure('rpc');
// if ($this->app instanceof LaravelApplication && $this->app->runningInConsole()) {
// $this->publishes([$source => config_path('rpc.php')], 'rpc');
// } elseif ($this->app instanceof LumenApplication) {
// $this->app->configure('rpc');
// }
// var_dump($this->app instanceof LumenApplication); // false
// exit();
$this->mergeConfigFrom($source, 'rpc');
if ($this->app instanceof LaravelApplication && $this->app->runningInConsole()) {
$this->publishes([$source => config_path('rpc.php')], 'rpc');
} elseif ($this->app instanceof LumenApplication) {
$this->app->configure('rpc');
}
$this->mergeConfigFrom($source, 'rpc');
}
public function register()
{
$this->setupConfig();
$this->logger = new Logger('RPC.LOGGER');
$config = config('rpc');
$stream = new StreamHandler($config['log_path']);
$stream->setFormatter(new $config['log_formatter']());
$this->logger->pushHandler($stream);
$this->app->singleton("rpc.logger", function () {
$config = config('rpc');
$stream = new StreamHandler($config['log_path']);
$stream->setFormatter(new $config['log_formatter']());
$logger = new Logger('RPC.LOGGER');
return $logger->pushHandler($stream);
});
}
}

View File

@ -16,14 +16,13 @@ class ClientServiceProvider extends BaseServiceProvider
public function register()
{
parent::register();
$this->app->configure('rpc');
$config = config('rpc');
if (!is_array($config)) {
throw new RpcServerException("Application's Rpc Client Config Undefind", 500);
}
$this->app->singleton('rpc', function () use ($config) {
$client = new Client($config);
$client->setLogger($this->logger);
return $client;
$this->app->singleton('rpc', function () use ($config) {
return new Client($config);
});
foreach ($config['client'] as $k => $item) {

View File

@ -40,7 +40,6 @@ class LumenServerServiceProvider extends BaseServiceProvider
}
$callback = function () use ($config) {
$server = new JsonRpcServer($config);
$server->setLogger($this->logger);
return $server->handler();
};

View File

@ -6,7 +6,6 @@ namespace JsonRpc\Server;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use JsonRpc\JsonRpc;
use Psr\Log\LoggerInterface;
class JsonRpcServer extends JsonRpc
{
@ -14,19 +13,13 @@ class JsonRpcServer extends JsonRpc
* @var Request
*/
public $request;
/**
* @var LoggerInterface
*/
protected $logger;
/**
* @var array 配置
* @var config 配置
*/
protected $config;
/**
* @var array rpc.server.map rpc方法
* @var rpc.server.map rpc方法
*/
protected $map;
@ -37,22 +30,18 @@ class JsonRpcServer extends JsonRpc
$this->map = $config['map'];
}
public function setLogger($logger){
$this->logger = $logger;
}
public function handler()
{
if ($this->request->getContentType() != 'json') {
return $this->error(self::Rpc_Error_Invalid_Request);
}
// if ($this->request->getContentType() != 'json') {
// return $this->error(self::Rpc_Error_Invalid_Request);
// }
try {
if ($this->request->method() == Request::METHOD_GET) {
$method = $this->request->input('method');
$id = $this->request->input('id');
$params = \GuzzleHttp\json_decode($this->request->input('params'), true);
$params = \GuzzleHttp\json_decode($this->request->input('params'),true);
} else {
list($method, $params, $id) = $this->parseJson($this->request->getContent());
}
@ -67,9 +56,9 @@ class JsonRpcServer extends JsonRpc
return $this->error(self::Rpc_Error_Invalid_Params);
}
$this->request->attributes->add(['tunnel_method' => $method, 'tunnel_params' => $params]);
$this->logger && $this->logger->info('server', [$id, $class, $method, $params]);
app('rpc.logger')->info('server', [$id, $class,$method, $params]);
$ret = call_user_func_array([(new $class($id, $this->request)), $function], $params);
$this->logger && $this->logger->info('server_result', [$id, $ret]);
app('rpc.logger')->info('server_result', [$id, $ret]);
return JsonResponse::create($ret);
@ -78,11 +67,6 @@ class JsonRpcServer extends JsonRpc
}
}
/**
* 处理json rpc post body
* @param $data
* @return array
*/
protected function parseJson($data)
{
$data = \GuzzleHttp\json_decode($data, true);
@ -92,23 +76,36 @@ class JsonRpcServer extends JsonRpc
return [$method, $params, $id];
}
/**
* 根据method解析出对应的class
* @param $method
* @return array|mixed
*/
protected function parseMethodWithMap($method)
{
return isset($this->map[$method]) ? $this->map[$method] : ['', ''];
}
/**
* 检查调用方式是否足够
* @param $class
* @param $method
* @param $parameters
* @return bool
* thisis
* @param string $method 参数名称
* @return array 返回结果
*/
// protected function parseMethod($method)
// {
// $method = explode('.', $method);
//
// if (count($method) < 2) {
// return ['', ''];
// }
//
// $function = array_pop($method);
// $class = 'Rpc' . ucwords(array_pop($method));
//
// foreach ($method as $one) {
// $class = ucwords($one) . '\\' . $class;
// }
//
// $class = "App\Rpc\\$class";
// return [$class, $function];
// }
protected function isEnoughParameter($class, $method, $parameters)
{
$r = new \ReflectionMethod($class, $method);

View File

@ -1,25 +0,0 @@
<?php
include_once dirname(__DIR__) . '/vendor/autoload.php';
$client = new \JsonRpc\Client([
'app' => 'abc',
'client' => [
'default' => [
'base_uri' => 'http://localhost:8080',
]
],
]);
$client->endpoint('default');
$json = json_encode([
'order_id' => '123',
'user_id' => '456',
]);
try {
$res = $client->call('topic.produce', ['abc', $json]);
var_dump($res);
} catch (Exception $e) {
var_dump($e->getCode(),$e->getMessage());
}

View File

@ -1,19 +1,8 @@
<?php
include_once dirname(__DIR__) . '/vendor/autoload.php';
include_once dirname(__DIR__).'/vendor/autoload.php';
$client = new \JsonRpc\Client([
'app' => 'abc',
'client' => [
'default' => [
'base_uri' => 'http://localhost:8080',
]
],
]);
$client = new \JsonRpc\Client();
$client->endpoint('default');
$res = $client->call('math.subtract',['12','23',500]);
try {
$res = $client->call('math.subtract', ['12', '23', 500]);
} catch (Exception $e) {
var_dump($e->getMessage());
}
var_dump($res);