think-swoole应用-微服务之RPC远程调用通信实战

RPC(Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。

解决问题:
解决分布式系统中,服务之间的调用问题。
远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑。

Think-Swoole中已经实现了的基于TCP的PRC,这样我们使用传统型框架也可以做简单的分布式架构应用了。

一、配置服务端
1,修改 config/swoole.php

    'rpc'        => [
        'server' => [
            'enable'   => true,
            'port'     => 9000,
            'services' => [
				\app\rpc\service\UserService::class            ],
        ],
        'client' => [
        ],
    ],

2,新增rpc目录结构如下:

3,定义接口抽象方法

<?php// +----------------------------------------------------------------------// | najing [ 通用后台管理系统 ]// +----------------------------------------------------------------------// | Copyright (c) 2020 http://www.najingquan.com ;All rights reserved.// +----------------------------------------------------------------------// | Author: 救火队队长namespace app\rpc\interfaces;interface UserInterface{
    public function add($name);}

4,实现接口方法

<?php// +----------------------------------------------------------------------// | najing [ 通用后台管理系统 ]// +----------------------------------------------------------------------// | Copyright (c) 2020 http://www.najingquan.com ;All rights reserved.// +----------------------------------------------------------------------// | Author: 救火队队长namespace app\rpc\service;use app\rpc\interfaces\UserInterface;class UserService implements UserInterface{
    public function add($name)
    {
        return "您要新增的用户名是:{$name}";
    }}

服务端的操作就已经完成。 可以开启swoole 命令 php think swoole start

二、配置客户端
1,修改 config/swoole.php





'rpc'        => [
        'server' => [
            'enable'   => false,
            'port'     => 9000,
            'services' => [	
            ],
        ],
        'client' => [
			'userservice'=>[
                 //RPC服务端的ip地址
				'host' => '127.0.0.1',
                 //RPC服务端的端口
				'port' => 9000

			]
        ],
    ],

2,生成RPC服务接口

php think rpc:interface

会在app目录下生成一个rpc.php的文件,它就是RPC服务接口文件
文件内容大致:





<?php/**
 * This file is auto-generated.
 */declare(strict_types=1);namespace rpc\contract\userservice;interface UserInterface{
	public function add($name);}return ['userservice' => ['rpc\contract\userservice\UserInterface']];

注意return中就是每个服务接口的命名空间;在控制器中使用该命名空间实例对象就可以调用

3,Controller调用





<?php// +----------------------------------------------------------------------// | najing [ 通用后台管理系统 ]// +----------------------------------------------------------------------// | Copyright (c) 2020 http://www.najingquan.com ;All rights reserved.// +----------------------------------------------------------------------// | Author: 救火队队长namespace app\controller;use app\BaseController;use rpc\contract\userservice\UserInterface;class User extends BaseController{
    public function add(UserInterface $user)
    {
       echo $user->add("救火队队长");
    }}

4,浏览器访问客户端Controller
6收藏点击回复

发表评论