Nacos客户端

1.0.1 版本
2022-05-13 版本更新时间
29 安装
10 star

更新记录

  • 🐰 2022-05-13: v1.0.1

    1. 新增Workbunny\WebmanNacos\Timer 定时器
    2. 解决服务启动时不会立即监听的问题
    3. 临时解决异步配置监听器在设置长轮询间隔低于20会抛出Connection closed错误的问题
      • 初步判断可能是workerman/http-client的请求在判断timeout时有错误,导致当前连接异常关闭
  • 🐰 2022-05-12: v1.0.0

    1. 配置监听器非侵入,在webman环境下直接使用config()即可,无需侵入改造
    2. 配置更新可触达常驻连接等业务点,自动触发Workers的reload
    3. 文件接近零延迟的同步
    4. 提供以下两种配置监听器使用,在process.php中进行配置:
      • 异步非阻塞配置监听器
      • 同步并发阻塞配置监听器
    5. 提供常规的Nacos API方法

简介

  • Nacos 致力于帮助您发现、配置和管理微服务;是微服务/SOA架构体系中服务治理环节的重要成员服务;

  • Webman-naocs是基于PHP开发的Webman插件生态下的Nacos客户端;

  • 本项目来源于 Tinywan/nacos,对 Tinywan 表示感谢!区别于 Tinywan/nacosworkbunny/webman-nacos在配置监听和实例注册上有不同的实现方式,其他的使用方法与之无异;

  • Webman-nacos使用的主要组件:

    • workerman/http-client
    • guzzlehttp/guzzle

安装

composer require workbunny/webman-nacos

使用

1. Nacos文档地址

2. 代码示例

  • 以获取配置举例:
$client = new Workbunny\WebmanNacos\Client();
$response = $client->config->get('database', 'DEFAULT_GROUP');
if (false === $response) {
    var_dump($nacos->config->getMessage());
}
  • 其他接口:
# 配置相关接口
$client->config;

# 鉴权相关接口
$client->auth;

# 实例相关接口
$client->instance;

# 系统相关接口
$client->operator;

# 服务相关接口
$client->service;
  • 后缀为Async的方法是Guzzle异步请求,在workerman的on回调中依旧是阻塞,只是多个请求可以并发执行

  • 后缀为AsyncUseEventLoop的方法是workerman/http-client异步请求,在workerman的on回调中是非阻塞的

说明

  • 目前这套代码在我司生产环境运行,我会做及时的维护,欢迎 issue 和 PR

  • nacos的配置监听项采用了服务端长轮询,有点类似于stream_select,当配置没有改变的时候,会阻塞至请求结束;但当配置有变化时候,会立即返回其配置dataId;这里我的做法是开启一个Timer对配置进行监听,定时器间隔与长轮询最大阻塞时间一致:

    1. ConfigListenerProcess使用Guzzle的异步请求对配置监听器进行请求处理,
      onWorkerStart中的Guzzle客户端会阻塞请求,workerman status中会显示BUSY状态;

    2. AsyncConfigListenerProcess使用wokerman/http-client异步请求对配置监听
      器进行请求,workerman/http-client使用了workerman的event-loop进行I/O处理,
      不会阻塞当前进程,推荐使用;

  • 所有的配置同步后会触发 workerman reload 对所有进程进行重载,保证了config的刷新,包括已经在内存中的各种单例,如 数据库连接、Redis连接等,保证即时将配置传达至需要的业务点;

  • 使用配置方式不必改变,使用webman的config()即可,降低封装组件的心智负担

其他