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