{"id":19829662,"url":"https://github.com/workbunny/webman-nacos","last_synced_at":"2026-01-16T05:04:23.137Z","repository":{"id":37905675,"uuid":"490563488","full_name":"workbunny/webman-nacos","owner":"workbunny","description":"🚀🐇 Webman plugin workbunny/webman-nacos","archived":false,"fork":false,"pushed_at":"2026-01-13T03:26:17.000Z","size":135,"stargazers_count":65,"open_issues_count":1,"forks_count":7,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-01-13T05:57:58.186Z","etag":null,"topics":["nacos","php","webman","workbunny","workerman"],"latest_commit_sha":null,"homepage":"https://www.workerman.net/plugin/50","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/workbunny.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-05-10T06:07:52.000Z","updated_at":"2026-01-13T03:24:55.000Z","dependencies_parsed_at":"2023-01-29T18:30:57.900Z","dependency_job_id":"acdf5558-4028-4f34-b6f5-8ab148c835d6","html_url":"https://github.com/workbunny/webman-nacos","commit_stats":{"total_commits":46,"total_committers":5,"mean_commits":9.2,"dds":"0.17391304347826086","last_synced_commit":"f290be0c04259df476b7e50d640a13ef513bce19"},"previous_names":[],"tags_count":29,"template":false,"template_full_name":null,"purl":"pkg:github/workbunny/webman-nacos","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/workbunny%2Fwebman-nacos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/workbunny%2Fwebman-nacos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/workbunny%2Fwebman-nacos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/workbunny%2Fwebman-nacos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/workbunny","download_url":"https://codeload.github.com/workbunny/webman-nacos/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/workbunny%2Fwebman-nacos/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28477210,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T03:13:13.607Z","status":"ssl_error","status_checked_at":"2026-01-16T03:11:47.863Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["nacos","php","webman","workbunny","workerman"],"created_at":"2024-11-12T11:19:30.503Z","updated_at":"2026-01-16T05:04:23.132Z","avatar_url":"https://github.com/workbunny.png","language":"PHP","readme":"\u003cp align=\"center\"\u003e\u003cimg width=\"260px\" src=\"https://chaz6chez.cn/images/workbunny-logo.png\" alt=\"workbunny\"\u003e\u003c/p\u003e\n\n**\u003cp align=\"center\"\u003eworkbunny/webman-nacos\u003c/p\u003e**\n\n**\u003cp align=\"center\"\u003e🐇  PHP implementation of Nacos OpenAPI for webman plugin. 🐇\u003c/p\u003e**\n\n# A PHP implementation of Nacos OpenAPI for webman plugin\n\n\u003cdiv align=\"center\"\u003e\n    \u003ca href=\"https://github.com/workbunny/webman-nacos/actions\"\u003e\n        \u003cimg src=\"https://github.com/workbunny/webman-nacos/actions/workflows/CI.yml/badge.svg\" alt=\"Build Status\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/workbunny/webman-nacos/releases\"\u003e\n        \u003cimg alt=\"Latest Stable Version\" src=\"https://badgen.net/packagist/v/workbunny/webman-nacos/latest\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/workbunny/webman-nacos/blob/main/composer.json\"\u003e\n        \u003cimg alt=\"PHP Version Require\" src=\"https://badgen.net/packagist/php/workbunny/webman-nacos\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/workbunny/webman-nacos/blob/main/LICENSE\"\u003e\n        \u003cimg alt=\"GitHub license\" src=\"https://badgen.net/packagist/license/workbunny/webman-nacos\"\u003e\n    \u003c/a\u003e\n\u003c/div\u003e\n\n## Naocs插件问答帖\n\n[https://www.workerman.net/q/9134](https://www.workerman.net/q/9134)\n\n## 简介\n\n### 什么是Nacos？\n\n[Nacos](https://nacos.io/) 致力于帮助您发现、配置和管理微服务；是微服务/SOA架构体系中服务治理环节的重要成员服务；简单的可以把Nacos理解为一个配置中心和一个服务注册中心。\n\n### 什么时候用Nacos？\n\n- 当我们的服务越来越大、越来越复杂，需要配置的地方越来越多，配置存放的地方也越来越多的时候，为了可以方便统一管理配置，这时候就可以引入[Nacos](https://nacos.io/)。\n\n- 当我们的服务越来越多，有些时候部署需要做到弹性伸缩，需要用到一些负载策略的时候，可以引入[Nacos](https://nacos.io/)进行服务的治理。\n\n### 生态\n\n- Webman-naocs是基于PHP开发的[Webman](https://github.com/walkor/webman)插件生态下的Nacos客户端；\n\n- 本项目来源于 [Tinywan/nacos](https://www.workerman.net/plugin/25)，对 Tinywan 表示感谢！区别于 [Tinywan/nacos](https://www.workerman.net/plugin/25)，[workbunny/webman-nacos](https://github.com/workbunny/webman-nacos)在配置监听和实例注册上有不同的实现方式，其他的使用方法与之无异；\n\n- Webman-nacos使用的主要组件：\n    - [workerman/http-client](https://github.com/walkor/http-client)\n    - [guzzlehttp/guzzle](https://github.com/guzzle/guzzle/)\n\n## 安装\n~~~\ncomposer require workbunny/webman-nacos\n~~~\n\n## 使用\n\n### 1. Nacos文档地址\n\n- **[Nacos Open-API文档](https://nacos.io/zh-cn/docs/open-api.html)**\n\n### 2. 服务的使用\n\n1. 创建连接通道\n```php\n// 使用默认通道【建议使用】\n$client = \\Workbunny\\WebmanNacos\\Client::channel();\n// 使用channel.php中键名为ABC的连接配置\n$client = \\Workbunny\\WebmanNacos\\Client::channel('ABC');\n```\n\u003e **注：该方案默认使用channel.php中的连接配置，支持多通道连接，建议使用！**\n\n\u003e **注：获取一个不存在的配置信息时，会抛出一个 NacosException 异常。**\n\n2. 以监听配置举例\n```php\n   \n$client = \\Workbunny\\WebmanNacos\\Client::channel();\n// 异步非阻塞监听\n// 注：在webman中是异步非阻塞的，不会阻塞当前进程\n$response = $client-\u003econfig-\u003elistenerAsyncUseEventLoop();\n// 异步阻塞监听\n// 注：在webman中是异步阻塞的，返回的是Guzzle/PromiseInterface，配合wait()可以多条请求并行执行；\n//     请求会阻塞在 **wait()** 直到执行完毕；详见 **ConfigListernerProcess.php** \n$response = $client-\u003econfig-\u003elistenerAsync();\n// 同步阻塞监听\n$response = $client-\u003econfig-\u003elistener();\n```\n\n3. 断开连接\n```php\n$client = \\Workbunny\\WebmanNacos\\Client::channel();\n$client-\u003ecancel();\n```\n\n#### 配置说明：\n\n1. app.php 为基础配置；\n2. channel.php 为连接通道配置；\n3. process.php 为默认启动进程配置；\n4. listeners.php 为监听配置文件；\n5. registrars.php 为注册配置文件；\n\n### 3. Nacos相关服务\n#### 配置相关\n\n- 监听配置 \n\nwebman-nacos组件默认会启动一个名为 **config-listener** 的进程，用于监听在配置文件\n**plugin/workbunny/webman-nacos/listeners.php**\n下的配置内容。\n\n如果想自行掌控调用，可以使用如下服务：\n```php\n$client = \\Workbunny\\WebmanNacos\\Client::channel();\n\n// 异步非阻塞监听\n// 注：在webman中是异步非阻塞的，不会阻塞当前进程\n$response = $client-\u003econfig-\u003elistenerAsyncUseEventLoop();\n\n// 异步阻塞监听\n// 注：在webman中是异步阻塞的，返回的是Guzzle/PromiseInterface，配合wait()可以多条请求并行执行；\n//     请求会阻塞在 **wait()** 直到执行完毕；详见 **ConfigListernerProcess.php** \n$response = $client-\u003econfig-\u003elistenerAsync();\n\n# 同步阻塞监听\n$response = $client-\u003econfig-\u003elistener();\n```\n\n- 获取配置\n\n```php\n$client = \\Workbunny\\WebmanNacos\\Client::channel();\n$response = $client-\u003econfig-\u003eget('database', 'DEFAULT_GROUP');\n// 获取有命名空间的配置文件，第三个参数填写对应的命名空间\n$response = $client-\u003econfig-\u003eget('database', 'DEFAULT_GROUP', 'b34ea59f-e240-413b-ba3d-bb040981d773');\nif (false === $response) {\n    var_dump($nacos-\u003econfig-\u003egetMessage());\n}\n```\n\n- 提交配置\n\n```php\n$client = \\Workbunny\\WebmanNacos\\Client::channel();\n$response = $client-\u003econfig-\u003epublish('database', 'DEFAULT_GROUP', file_get_contents('.env'));\nif (false === $response) {\n    var_dump($nacos-\u003econfig-\u003egetMessage());\n}\n```\n\n- 移除配置\n\n```php\n$client = \\Workbunny\\WebmanNacos\\Client::channel();\n$response = $client-\u003econfig-\u003edelete('database', 'DEFAULT_GROUP');;\nif (false === $response) {\n    var_dump($nacos-\u003econfig-\u003egetMessage());\n}\n```\n\n#### 服务相关：\n\n- 实例注册\n\nwebman-nacos组件默认会启动一个名为 **instance-registrar** 的进程，用于注册在配置文件\n**plugin/workbunny/webman-nacos/registrars.php**\n下的配置内容。\n\n如需动态注册实例，请使用：\n\n```php\n$client = \\Workbunny\\WebmanNacos\\Client::channel();\n$response = $client-\u003einstance-\u003eregister('127.0.0.1', 8848, '猜猜我是谁', [\n    'groupName' =\u003e 'DEFAULT_GROUP',\n]);\nif (false === $response) {\n    var_dump($client-\u003einstance-\u003egetMessage());\n}\nvar_dump($response);\n```\n\n- 移除实例\n\n```php\n$client = \\Workbunny\\WebmanNacos\\Client::channel();\n$response = $client-\u003einstance-\u003edelete('猜猜我是谁', 'DEFAULT_GROUP', '127.0.0.1', 8848, []);\nif (false === $response) {\n    var_dump($client-\u003econfig-\u003egetMessage());\n}\n```\n\n- 实例列表\n\n```php\n$client = \\Workbunny\\WebmanNacos\\Client::channel();\n$response = $client-\u003einstance-\u003elist('猜猜我是谁', []);\nif (false === $response) {\n    var_dump($client-\u003econfig-\u003egetMessage());\n}\nprint_r($response);\n```\n\n**注：实例与服务的区别请参看Nacos文档；**\n\n#### 其他：\n\n- **具体使用参数都在源码内已标注，使用方法很简单，参考Nacos官方文档即可；**\n\n- **后缀为Async的方法是Guzzle异步请求，在当前业务执行周期中阻塞，多个请求可并行执行；**\n\n- **后缀为AsyncUseEventLoop的方法是workerman/http-client异步请求，在当前业务周期中非阻塞；**\n\n```php\n$client = \\Workbunny\\WebmanNacos\\Client::channel();\n\n# 配置相关接口\n$client-\u003econfig;\n\n# 鉴权相关接口\n$client-\u003eauth;\n\n# 实例相关接口\n$client-\u003einstance;\n\n# 系统相关接口\n$client-\u003eoperator;\n\n# 服务相关接口\n$client-\u003eservice;\n```\n\n\n## 说明\n\n- 目前这套代码在我司生产环境运行，我会做及时的维护，**欢迎 issue 和 PR**；\n\n- 对于不知道Nacos有什么用的/在什么时候用，可以参考这篇文章 [Nacos在我司的应用及SOA初尝](https://www.workerman.net/a/1339);\n\n- nacos的配置监听项采用了服务端长轮询，有点类似于stream_select，当配置没有改变的时候，会阻塞至请求结束；但当配置有变化时候，会立即返回其配置dataId；这里我的做法是开启一个Timer对配置进行监听，定时器间隔与长轮询最大阻塞时间一致:\n\n    1. ConfigListenerProcess使用Guzzle的异步请求对配置监听器进行请求处理，\n       onWorkerStart中的Guzzle客户端会阻塞请求，workerman status中会显示BUSY状态；\n\n    2. AsyncConfigListenerProcess使用wokerman/http-client异步请求对配置监听\n       器进行请求，workerman/http-client使用了workerman的event-loop进行I/O处理，\n       不会阻塞当前进程，推荐使用；\n\n- 所有的配置同步后会触发 **workerman reload** 对所有进程进行重载，保证了config的刷新，包括已经在内存中的各种单例，如 数据库连接、Redis连接等，保证即时将配置传达至需要的业务点；\n\n- 使用配置方式不必改变，使用webman的`config()`即可，降低封装组件的心智负担;\n\n\n## 其他\n- **[趣谈程序的演变过程](https://www.workerman.net/a/1341)**\n- **[Nacos在我司的应用及SOA初尝](https://www.workerman.net/a/1339)**\n- **[Nacos Open-API文档](https://nacos.io/zh-cn/docs/open-api.html)**\n- **[workbunny/webman-nacos 项目地址](https://github.com/workbunny/webman-nacos)**\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fworkbunny%2Fwebman-nacos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fworkbunny%2Fwebman-nacos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fworkbunny%2Fwebman-nacos/lists"}