栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

PHP服务注册到Nacos(Laravel框架)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PHP服务注册到Nacos(Laravel框架)

背景

现在的ERP系统由很多的模块组成,有PHP的、有JAVA的,为了实现统一访问,增加了统一的网关,PHP本身在服务注册这块开源的东西不多,同时为了兼容多语言问题,这里选用了Nacos来做注册中心和服务中心,需要把PHP的服务也注册到Nacos。

一、前置依赖安装

1、配置要求:grpc扩展、php7+
2、安装

Pecl安装
pecl install protobuf
pecl install grpc
把安装好的扩展加入PHP配置文件
echo "extension=protobuf.so" >> php.ini
echo "extension=grpc.so" >> php.ini
3、可能的问题 gcc 版本太低,升级 gcc
yum install centos-release-scl   //安装centos-release-scl
yum install devtoolset-7-gcc*    //安装devtoolset,注意,如果想安装8.版本的,就改成devtoolset-8-gcc,以此类推
scl enable devtoolset-7 bash     //激活对应的devtoolset
gcc -v                           //查看版本
zlib 不存在,需要安装zlib
yum install -y zlib.x86_64 zlib-devel.x86_64
二、Composer安装
composer require alibaba/nacos
三、PHP服务注册到Nacos


    use LoggerSendMsgTrait;

    
    protected $signature = 'ServiceRegister {--action=}';

    
    protected $description = '服务注册到Nacos';
    
    private $naming;
    
    public function __construct()
    {
        parent::__construct();
        NacosConfig::setHost("http://172.16.104.170:8848/"); //上面如果启用的了域名就用域名,如果用了VIP就用VIP,这里为了测试简单用了简单模式
        $this->naming = Naming::init(
            "erp-oms",          //服务的名称,随便取,在Nacos里不重复就可以了,如果重复就代表同一个服务的不同节点,用于高可用
            "172.16.104.170",   //服务的地址
            "8000",             //服务的端口号
            "",
            "",
            false               //设置后nacos服务器会自动检测ip和端口匹配的实例是否存活 设置后就无需客户端发送实例心跳了,
                                //但是测试结果是,PHPFPM停掉后,服务一直显示健康,只有对应的Nginx挂了,才会变成实体不健康
        );
    }
    
    public function handle(){
        $action = $this->option('action') ?? 'register';
        switch ($action) {
            case 'register':
                $this->naming->register();
                break;
            case 'delete':
                $this->naming->delete();    //测试实例删除返回成功,实际删除不成功,后台一直显示存在
                break;
        }
    }
}
四、测试总结

经过测试,PHP服务注册到Nacos是没有问题,也可以正常访问成功,可以正常使用
问题点:
1、服务实例删除报成功,但是实际是失败的
2、PHP-FPM挂了,实例并不会显示不健康,只要Nginx还是正常的,那么这个服务实例就不会显示不健康,只有Nginx挂掉了,才会显示实例不健康。

后记:

经测试,上面那个问题已解决


    protected function getParameterAndHeader()
    {
        $headers = [];
        $parameterList = [];

        $properties = ReflectionUtil::getProperties($this);
        foreach ($properties as $propertyName => $propertyValue) {
            if (in_array($propertyName, $this->standaloneParameterList)) {
                // 忽略这些参数
            } else {
                $parameterList[$propertyName] = $propertyValue;
            }
        }

        //修改为所有接口都传这个参数,不传这个参数,删除不会成功的
        $parameterList["ephemeral"] = NamingConfig::getEphemeral();

        if (NacosConfig::getIsDebug()) {
            LogUtil::info(strtr("parameterList: {parameterList}, headers: {headers}", [
                "parameterList" => json_encode($parameterList),
                "headers" => json_encode($headers)
            ]));
        }
        return [$parameterList, $headers];
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/826496.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号