不兼容修改-003

最后更新于:2022-04-02 07:08:20

## 不兼容修改-003 (2020-03-13) > 本次更新主要是为了和即将推出的微服务开发统一骨架代码,在`SyncInvoke` `JsonRpc`两个模块有不兼容改动 当你使用 `composer update` 命令升级后出现以下异常时,请根据以下提示修复 ## Class 'Mix\JsonRpc\Pool\ConnectionPool' not found 由于 JsonRpc 微服务化,所以重写了客户端,也移除了 Pool 的功能,因此需修改依赖注入使用新的客户端类。 1. 在 manifest/beans/jsonrpc.php 文件中全部内容修改为如下: ~~~ \Mix\JsonRpc\Client\Connection::class, // 初始方法 'initMethod' => 'connect', // 属性注入 'properties' => [ // host 'host' => '127.0.0.1', // port 'port' => 9506, ], ], // JsonRpc服务器 [ // 名称 'name' => 'jsonRpcServer', // 类路径 'class' => \Mix\JsonRpc\Server::class, // 构造函数注入 'constructorArgs' => [ // host '127.0.0.1', // port 9506, ], ], ]; ~~~ 2. 在客户端调用处修改 `context()->get()` 内的依赖名称 ``` $this->client = context()->get(\Mix\JsonRpc\Client::class); ``` 修改为: ``` $this->client = context()->get(\Mix\JsonRpc\Client\Connection::class); ``` ## Class 'Mix\SyncInvoke\Client' not found 1. 在 manifest/beans/syncinvoke.php 文件中全部内容修改为如下: ~~~ 'syncInvokePool', // 作用域 'scope' => \Mix\Bean\BeanDefinition::SINGLETON, // 类路径 'class' => \Mix\SyncInvoke\Pool\ConnectionPool::class, // 属性注入 'properties' => [ // 最多可空闲连接数 'maxIdle' => 5, // 最大连接数 'maxActive' => 50, // 拨号器 'dialer' => ['ref' => \Mix\SyncInvoke\Pool\Dialer::class], // 事件调度器 'eventDispatcher' => ['ref' => 'event'], ], ], // SyncInvoke连接池拨号器 [ // 类路径 'class' => \Mix\SyncInvoke\Pool\Dialer::class, // 属性注入 'properties' => [ // port 'port' => 9505, ], ], // SyncInvoke服务器 [ // 名称 'name' => 'syncInvokeServer', // 类路径 'class' => \Mix\SyncInvoke\Server::class, // 构造函数注入 'constructorArgs' => [ // port 9505, ], ], ]; ~~~ 2. 在客户端同步代码调用处修改为如下这种连接池的方式: ~~~ */ class CurlController { /** * @var ConnectionPool */ public $pool; /** * CurlController constructor. */ public function __construct(ServerRequest $request, Response $response) { $this->pool = context()->get('syncInvokePool'); } /** * Index * @param ServerRequest $request * @param Response $response * @return Response * @throws \Mix\SyncInvoke\Exception\InvokeException * @throws \Swoole\Exception */ public function index(ServerRequest $request, Response $response) { // 跨进程执行同步代码 $conn = $this->pool->getConnection(); $data = $conn->invoke(function () { // ... }); $conn->release(); // 响应 $content = ['code' => 0, 'message' => 'OK', 'data' => $data]; return ResponseHelper::json($response, $content); } } ~~~ ## Cannot make static method Mix\\Route\\Router::show404() non static in class App\\Web\\Route\\Router 凡是出现 `show404`、`show500` 异常的,都是因为继承重写该两个方法导致的问题,因为我修改了父类的方法,这时候用户只需要查看一下父类的这两个方法是否是 `static` ,修改为与父类一致即可。
';