laravel调用java服务_把Laravel的控制器变为RPC服务进行调用

服务端

use Hprose\Http\Server;

class ServiceInit

{

public function init()

{

$server = new Server();

//定义需要远程调用的控制器并设置其别名

$classes = [

[new HomeController(),'home']

];

//中间件

$requestHandler = function ($name, array &$args, stdClass $context, Closure $next) {

//模拟request

$request = new Request();

$request->server->add($args[0]);

$request->headers->add($args[1]);

$request->replace($args[2]);

//重置参数

$params = [$request];

for ($i = 3; $i < count($args); $i++) {

$params[] = $args[$i];

}

$result = $next($name, $params, $context);

return $result;

};

foreach ($classes as $item) {

if (is_array($item)) {

$class = $item[0];

$alias = $item[1];

} else {

$class = $item;

$aliasExplode = explode('\\', get_class($item));

$alias = $aliasExplode[count($aliasExplode) - 1];

}

$server->addInstanceMethods($class, '', $alias);

}

$server->addInvokeHandler($requestHandler);

$server->start();

}

}

客户端

use Hprose\Http\Client;

/**

* Class RpcClient

* @package App\Service

*

* @method home_index($array, $string)

*/

class RpcClient

{

protected $client;

public function __construct()

{

try {

$urlList = explode(',',env('RPC_SERVERS'));

$client = Client::create($urlList, false);

$this->client = $client;

} catch (\Exception $e) {

throw new \Exception('rpc client create error', 500);

}

}

public function __call($name, $arguments)

{

$request = app('request');

$params = array_merge([$request->server(), $request->header()], $arguments);

return call_user_func_array([$this->client, $name], $params);

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值