Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/grpc/protoc-gen-mix-grpc/php/template.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,13 @@ interface {{ .Service.Name | interface }} extends Grpc\ServiceInterface
public const NAME = "{{ .File.Package }}.{{ .Service.Name }}";{{ "\n" }}
{{- range $m := .Service.Method}}
/**
* @param Context $ctx
* @param {{ name $ns $m.InputType }} $in
* @param Context $context
* @param {{ name $ns $m.InputType }} $request
* @return {{ name $ns $m.OutputType }}
*
* @throws Grpc\Exception\InvokeException
*/
public function {{ $m.Name }}(Context $ctx, {{ name $ns $m.InputType }} $req): {{ name $ns $m.OutputType }};
public function {{ $m.Name }}(Context $context, {{ name $ns $m.InputType }} $request): {{ name $ns $m.OutputType }};
{{end -}}
}
`
Expand Down
1 change: 1 addition & 0 deletions src/grpc/src/Client/Dialer.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use Grpc\ChannelCredentials;
use Mix\Bean\BeanInjector;
use Mix\Grpc\Client\Middleware\MiddlewareInterface;
use Mix\Micro\Register\Exception\NotFoundException;
use Mix\Micro\Register\RegistryInterface;
use Mix\Micro\Register\ServiceInterface;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
<?php

namespace Mix\Grpc\Client;
namespace Mix\Grpc\Client\Message;

/**
* Class Parameters
* @package Mix\Grpc\Client
* @package Mix\Grpc\Client\Message
*/
class Parameters
{

/**
* @var object
*/
public $request;
public $argument;

/**
* @var array
Expand All @@ -24,4 +24,4 @@ class Parameters
*/
public $options = [];

}
}
22 changes: 22 additions & 0 deletions src/grpc/src/Client/Message/Request.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php

namespace Mix\Grpc\Client\Message;

/**
* Class Request
* @package Mix\Grpc\Client\Message
*/
class Request
{

/**
* @var callable
*/
public $callback;

/**
* @var Parameters
*/
public $parameters;

}
12 changes: 7 additions & 5 deletions src/grpc/src/Client/Middleware/MiddlewareDispatcher.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

namespace Mix\Grpc\Client\Middleware;

use Mix\Grpc\Client\Message\Request;

/**
* Class MiddlewareDispatcher
* @package Mix\Grpc\Client\Middleware
Expand All @@ -20,17 +22,17 @@ class MiddlewareDispatcher
public $callback;

/**
* @var Parameters
* @var Request
*/
public $parameters;
public $request;

/**
* InterceptDispatcher constructor.
* @param MiddlewareInterface[] $middleware
* @param callable $callback
* @param Request[] $requests
* @param Request $request
*/
public function __construct(array $middleware, callable $callback, Parameters $parameters)
public function __construct(array $middleware, callable $callback, Request $request)
{
$instances = [];
foreach ($middleware as $class) {
Expand All @@ -45,7 +47,7 @@ public function __construct(array $middleware, callable $callback, Parameters $p
}
$this->middleware = $instances;
$this->callback = $callback;
$this->parameters = $parameters;
$this->request = $request;
}

/**
Expand Down
6 changes: 4 additions & 2 deletions src/grpc/src/Client/Middleware/MiddlewareInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

namespace Mix\Grpc\Client\Middleware;

use Mix\Grpc\Client\Message\Request;

/**
* Interface MiddlewareInterface
* @package Mix\Grpc\Client\Middleware
Expand All @@ -11,10 +13,10 @@ interface MiddlewareInterface

/**
* Process
* @param Parameters $parameters
* @param Request $parameters
* @param RequestHandler $handler
* @return object
*/
public function process(Parameters $parameters, RequestHandler $handler): object;
public function process(Request $request, RequestHandler $handler): object;

}
11 changes: 5 additions & 6 deletions src/grpc/src/Client/Middleware/RequestHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@

namespace Mix\Grpc\Client\Middleware;

use Mix\JsonRpc\Message\Request;
use Mix\JsonRpc\Message\Response;
use Mix\Grpc\Client\Message\Request;

/**
* Class RequestHandler
Expand Down Expand Up @@ -35,16 +34,16 @@ public function __construct(array $middleware, callable $callback)

/**
* Handle
* @param Parameters $parameters
* @param Request $request
* @return object
*/
public function handle(Parameters $parameters): object
public function handle(Request $request): object
{
$middleware = array_shift($this->middleware);
if (!$middleware) {
return call_user_func($this->callback, $parameters);
return call_user_func($this->callback, $request);
}
return $middleware->process($parameters, $this);
return $middleware->process($request, $this);
}

}
20 changes: 14 additions & 6 deletions src/grpc/src/Client/Proxy.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

use Grpc\ChannelCredentials;
use Mix\Bean\BeanInjector;
use Mix\Grpc\Client\Message\Parameters;
use Mix\Grpc\Client\Message\Request;
use Mix\Grpc\Exception\InvokeException;
use Mix\Grpc\Client\Middleware\MiddlewareDispatcher;

Expand Down Expand Up @@ -50,24 +52,30 @@ public function __construct(array $config = [])
*/
public function __call($name, $arguments)
{
$parameters = new Parameters();
$parameters->request = $arguments[0] ?? null;
$request = new Request();
$parameters = $request->parameters = new Parameters();
$parameters->argument = $arguments[0] ?? null;
$parameters->metadata = $arguments[1] ?? [];
$parameters->options = $arguments[2] ?? [];
$callback = [$this->client, $name];
$callback = $request->callback = [$this->client, $name];

isset($parameters->options['timeout']) or $parameters->options['timeout'] = $this->timeout;

$process = function (Parameters $parameters) use ($callback) {
$object = call_user_func_array($callback, $parameters);
$process = function (Request $request) use ($callback) {
$parameters = [
$request->parameters->argument,
$request->parameters->metadata,
$request->parameters->options,
];
$object = call_user_func_array($callback, $parameters);
list($reply, $status) = $object->wait();
if (is_null($reply)) {
throw new InvokeException($status->details, $status->code);
}
return $reply;
};

$interceptDispatcher = new MiddlewareDispatcher($this->middleware, $process, $parameters);
$interceptDispatcher = new MiddlewareDispatcher($this->middleware, $process, $request);
return $interceptDispatcher->dispatch();
}

Expand Down
12 changes: 9 additions & 3 deletions src/grpc/src/Event/ProcessedEvent.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,16 @@ class ProcessedEvent
public $response;

/**
* 端点
* @var array ['service'=>'','method'=>'']
* 服务
* @var string
*/
public $service;

/**
* 方法
* @var string Foo.Bar
*/
public $endpoint;
public $method;

/**
* 执行异常信息
Expand Down
27 changes: 12 additions & 15 deletions src/grpc/src/Server.php
Original file line number Diff line number Diff line change
Expand Up @@ -135,13 +135,7 @@ public function register(string $class)
throw new \InvalidArgumentException(sprintf('%s::%s wrong number of parameters', $class, $method));
}

$this->callables[sprintf('/%s/%s', $name, $method)] = [
$class, $method,
[
'service' => $service,
'method' => sprintf('%s.%s', $className, $method),
],
];
$this->callables[sprintf('/%s/%s', $name, $method)] = [$class, $method, $service, sprintf('%s.%s', $className, $method)];
}
}

Expand Down Expand Up @@ -173,7 +167,7 @@ protected function call(ServerRequest $request, Response $response)
throw new NotFoundException('Invalid uri');
}

list($class, $method, $endpoint) = $this->callables[$path];
list($class, $method, $service, $endpoint) = $this->callables[$path];

$reflectClass = new ReflectionClass($class);
$reflectMethod = $reflectClass->getMethod($method);
Expand All @@ -187,7 +181,7 @@ protected function call(ServerRequest $request, Response $response)
$parameters = [];
array_push($parameters, $request->getContext());
array_push($parameters, $rpcRequest);
$rpcResponse = $this->process([$object, $method], $parameters, $endpoint);
$rpcResponse = $this->process([$object, $method], $parameters, $service, $endpoint);

$content = GrpcHelper::serialize($rpcResponse);
$body = (new StreamFactory())->createStream($content);
Expand All @@ -206,9 +200,10 @@ protected function call(ServerRequest $request, Response $response)
* Process
* @param callable $callback
* @param array $parameters
* @param array $endpoint
* @param string $service
* @param string $endpoint
*/
protected function process(callable $callback, array $parameters, array $endpoint)
protected function process(callable $callback, array $parameters, string $service, string $endpoint)
{
$microtime = GrpcHelper::microtime();
$request = $response = $error = null;
Expand All @@ -220,7 +215,7 @@ protected function process(callable $callback, array $parameters, array $endpoin
$code = $ex->getCode();
$error = sprintf('[%d] %s', $code, $message);
} finally {
$this->dispatch($request, $response, $endpoint, $microtime, $error);
$this->dispatch($request, $response, $service, $endpoint, $microtime, $error);
}
}

Expand Down Expand Up @@ -285,11 +280,12 @@ public function show500(\Throwable $exception, Response $response)
* Dispatch
* @param $request
* @param $response
* @param string $endpoint
* @param string $service
* @param string $method
* @param float $microtime
* @param null $error
*/
protected function dispatch($request, $response, array $endpoint, float $microtime, $error = null)
protected function dispatch($request, $response, string $service, string $method, float $microtime, $error = null)
{
if (!isset($this->dispatcher)) {
return;
Expand All @@ -298,7 +294,8 @@ protected function dispatch($request, $response, array $endpoint, float $microti
$event->time = round((GrpcHelper::microtime() - $microtime) * 1000, 2);
$event->request = $request;
$event->response = $response;
$event->endpoint = $endpoint;
$event->service = $service;
$event->method = $method;
$event->error = $error;
$this->dispatcher->dispatch($event);
}
Expand Down
21 changes: 2 additions & 19 deletions src/json-rpc/src/Client/Dialer.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,6 @@ class Dialer
*/
public $registry;

/**
* @var int
*/
public $retry = 3;

/**
* Dialer constructor.
* @param array $config
Expand Down Expand Up @@ -88,20 +83,8 @@ public function dial(string $host, int $port, MiddlewareInterface $middleware =
*/
public function dialFromService(string $name, MiddlewareInterface $middleware = null)
{
for ($i = 0; $i < $this->retry; $i++) {
try {
$service = $this->registry->service($name);
$conn = $this->dial($service->getAddress(), $service->getPort(), $middleware);
break;
} catch (NotFoundException $ex) {
throw $ex;
} catch (\Throwable $ex) {
if ($i == $this->retry - 1) {
throw $ex;
}
}
}
return $conn;
$service = $this->registry->service($name);
return $this->dial($service->getAddress(), $service->getPort(), $middleware);
}

}
12 changes: 9 additions & 3 deletions src/json-rpc/src/Event/ProcessedEvent.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,16 @@ class ProcessedEvent
public $response;

/**
* 端点
* @var array ['service'=>'','method'=>'']
* 服务
* @var string
*/
public $service;

/**
* 方法
* @var string Foo.Bar
*/
public $endpoint;
public $method;

/**
* 执行异常信息
Expand Down
Loading