我是靠谱客的博主 跳跃老师,最近开发中收集的这篇文章主要介绍PHP服务注册到Nacos(Laravel框架)背景一、前置依赖安装二、Composer安装三、PHP服务注册到Nacos四、测试总结后记:,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
背景
现在的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
<?php
namespace AppConsoleCommandsNacos;
use alibabanacosNacosConfig;
use alibabanacosNaming;
use AppTraitsLoggerSendMsgTrait;
use IlluminateConsoleCommand;
/**
* @CLassname ServiceRegister
* @Description TODO
* @Author blueo
* @Date 2022/1/28 12:27
*/
class ServiceRegister extends Command
{
use LoggerSendMsgTrait;
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'ServiceRegister {--action=}';
/**
* The console command description.
*
* @var string
*/
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挂掉了,才会显示实例不健康。
后记:
经测试,上面那个问题已解决
<?php
namespace alibabanacosrequestnaming;
use alibabanacosNacosConfig;
use alibabanacosNamingConfig;
use alibabanacosutilLogUtil;
use alibabanacosrequestRequest;
use alibabanacosutilReflectionUtil;
class NamingRequest extends Request
{
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];
}
}
最后
以上就是跳跃老师为你收集整理的PHP服务注册到Nacos(Laravel框架)背景一、前置依赖安装二、Composer安装三、PHP服务注册到Nacos四、测试总结后记:的全部内容,希望文章能够帮你解决PHP服务注册到Nacos(Laravel框架)背景一、前置依赖安装二、Composer安装三、PHP服务注册到Nacos四、测试总结后记:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复