php7 jsonrpc,利用 JSON-RPC 返回 PHP 对象遇到的问题

在[微服务]中JSON-RPC服务,这章中碰到了无法返回返回[PHP对象]的问题。

首先把场景复现下

1.服务在没有使用[PHP对象]时是正常的。

2.服务提供者的定义

namespace App\JsonRpc;

use Hyperf\RpcServer\Annotation\RpcService;

/**

* @RpcService(name="CalculatorService", protocol="jsonrpc", server="jsonrpc-http", publishTo="consul")

*/

class CalculatorService implements CalculatorServiceInterface

{

public function sum($a): MathValue

{

//返回一个MathValue对象

return new MathValue(5);

}

}

3.服务提供者的注册

//server.php中定义为9504端口

[

'name' => 'jsonrpc-http',

'type' => Server::SERVER_HTTP,

'host' => '0.0.0.0',

'port' => 9504,

'sock_type' => SWOOLE_SOCK_TCP,

'callbacks' => [

SwooleEvent::ON_REQUEST => [\Hyperf\JsonRpc\HttpServer::class, 'onRequest'],

],

]

//consul.php的注册

[

'uri' => 'consul:8500',

];

4.服务消费者定义

//services.php中的定义

return [

'consumers' => [

[

'name' => 'CalculatorService',

'service' => \App\JsonRpc\CalculatorServiceInterface::class,

'id' => \App\JsonRpc\CalculatorServiceInterface::class,

'protocol' => 'jsonrpc-http',

'load_balancer' => 'random',

'registry' => [

'protocol' => 'consul',

'address' => 'consul:8500',

],

'nodes' => [

['host' => '127.0.0.1', 'port' => 9504],

],

'options' => [

'connect_timeout' => 5.0,

'recv_timeout' => 5.0,

'settings' => [

'open_eof_split' => true,

'package_eof' => "\r\n",

],

'pool' => [

'min_connections' => 1,

'max_connections' => 32,

'connect_timeout' => 10.0,

'wait_timeout' => 3.0,

'heartbeat' => -1,

'max_idle_time' => 60.0,

],

],

]

],

];

5.进行消费

public function index()

{

$client = ApplicationContext::getContainer()->get(CalculatorServiceInterface::class);

$result = $client->sum(1);

var_dump($result->value);

}

6.生成的临时文件

namespace App\JsonRpc;

class CalculatorServiceInterface_ee8e44e618dd11853be3872215cf9e94 extends \Hyperf\RpcClient\Proxy\AbstractProxyService implements CalculatorServiceInterface

{

public function sum($v1) : MathValue

{

return $this->client->__call(__FUNCTION__, func_get_args());

}

}

问题描述

消费者报错

e718594bf4842ecb88e9d760ad132d3b.png

打印出 $this->client->__call(__FUNCTION__, func_get_args()) 的值

array(1) {

["value"]=>

int(5)

}

确实是一个数组。请问我该如何进行微服务中的PHP返回呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值