PHP code example of overlu / laravel-rpc
1. Go to this page and download the library: Download overlu/laravel-rpc library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
overlu / laravel-rpc example snippets
# 安装好Rpc扩展后,打开 config/app.php,注册如下服务提供者到 $providers 数组:
Overlu\Rpc\RpcServiceProvider::class
# 然后添加如下门面到 $aliaes 数组:
'Rpc' => \Overlu\Rpc\Facades\Rpc::class
/**
* rpc.php
* 基本信息配置
*/
return [
/**
* dev(default), production
* dev模式免签名验证
*/
'environment' => 'dev',
/**
* 验证方式: white_ip_lists(default) / signature
*/
// 'verify_method' => 'white_ip_lists',
'verify_method' => 'signature',
'white_ip_lists' => [
'127.0.0.1',
],
/**
* 秘钥,签名加密用,务必保证每个节点都一样
*/
'key' => 'Q6Hc4pLmSMeYHVnqnRu68UcbC36RvIW2P7v3eQyAyxQ',
/**
* 签名有效时间,单位秒
*/
'signature_expiry' => '600',
/**
* 异常处理驱动, rpc/default
*/
'exception_driver' => 'rpc',
/**
* 是否打开调用日志
*/
'log_info' => true,
'rpc_log_info_channel' => [
'driver' => 'daily',
'path' => storage_path('logs/rpc/info.log'),
'level' => 'info',
// 'days' => 14,
],
/**
* 是否打开错误日志
*/
'log_error' => true,
'rpc_log_error_channel' => [
'driver' => 'daily',
'path' => storage_path('logs/rpc/error.log'),
'level' => 'error',
// 'days' => 14,
],
/**
* 配置beanstalkd
*/
'beanstalkd' => [
'host' => env('BEANSTALKD_HOST', '127.0.0.1'),
'port' => env('BEANSTALKD_POST', '11300'),
'channel' => env('BEANSTALKD_CHANNEL', 'Lrpc_uDi7q'),
],
/**
* rpc服务端口
*/
'port' => env('RPC_SERVER_PORT', 1314),
/**
* 是否使用nacos服务
*/
'use_nacos' => false,
];
/**
* module.php
* 模块信息配置
*/
return [
/**
* Module Mapping
* ModuleName => Namespace\\ModuleName
*/
'mapping' => [
// 'ModuleName' => 'Namespace\\ModuleName',
],
/**
* 默认local驱动
*/
'default_driver' => 'local',
/**
* module registration center
*/
'registration' => [
'local' => [ // message queue监听使用,判断是否是自身服务
// 'ModuleName'
],
'mq' => [
// 'ModuleName'
],
'rpc' => [
// 'ModuleName'
],
'api' => [
// 'ModuleName'
],
],
/**
* rpc服务地址模块映射
* 一个模块对应多个服务地址,使用','隔开
*/
'hosts' => [
// 'ModuleName' => '127.0.0.1',
// 'ModuleName2' => '127.0.0.1,127.0.0.2',
]
];
// 配置模块映射(demo)
'mapping' => [
'Log' => '\\App\\RpcTest\\Log',
'SMS' => '\\App\\RpcTest\\SMS',
'News' => '\\App\\RpcTest\\News',
]
// 注册模块(demo)
'registration' => [
'local' => ['Log'],
'mq' => ['SMS'],
'rpc' => [],
'api' => ['News'],
]
// 配置服务地址(demo)
'hosts' => [
'Log' => '127.0.0.1',
'SMS' => '127.0.0.1,127.0.0.2',
'News' => '127.0.0.3'
]
namespace Namespace;
Class ClassName
{
/**
* @param $key
* @param $data
* @param $originData
*/
public static function handle($key, $data, $originData)
{
Cache::set('module.registration', $data['registration']);
Cache::set('module.mapping', $data['mapping']);
}
/**
* @param \Exception $exception
*/
public static function error(\Exception $exception)
{
dd($exception->getCode());
}
}
$result = Rpc::Module_Name('class_args1','class_args2')->method('method_arg',['method_arg2_1','method_arg2_2']);
var_dump($result);
// 1. 获取远程实例化对象,注意:实例化模块需要事先在配置文件module.php中进行相关注册操作
$news = Rpc::News();
$log = Rpc::Log('debug', 'file');
$sms = Rpc::SMS('ali');
$sms = Rpc::SMS('huaxin');
...
// 2. 调用远程对象方法,注意:和本地化调用以及传参一样,静态方法需要用::调用,普通方法用->调用
$news_list = $new->get();
$news_list_100 = $new->get(100);
dump($news_list, $news_list_100);
$log::debug('log debug info');
$sms->send(18888888888, '我是同步发送短信方式');
...
// 异步调用,需要在实例化模块前面加上"_"
$sms = Rpc::_SMS();
$sms->send(18888888888, '我是异步发送短信方式');
// 异步生成新闻
Rpc::_News()->create('news content');
// 新增回调函数,调用的函数名前面加上"_",在该回调函数内处理回调数据
public function _create($result)
{
// 在这里处理异步回调数据
if($result) {
echo 'create success';
} else {
echo 'create faild';
}
}
shell script
php composer.phar vendor:publish --provider="Overlu\Rpc\RpcServiceProvider"
shell script
php composer.phar
shell script
# demo
php artisan reget:listen demo.module.config --handle="Namespace\ClassName"
shell script
php artisan rpc:stop mq
php artisan rpc:stop rpc
php artisan rpc:stop all
shell script
php artisan rpc:reload mq
php artisan rpc:reload rpc
php artisan rpc:reload all
# 常驻后台
php artisan rpc:reload mq --d
php artisan rpc:reload rpc --d
php artisan rpc:reload all --d
shell script
php artisan rpc:status mq
php artisan rpc:status rpc