国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

【workbunny】Nacos客戶端

1.3.3 版本
2025-05-09 版本更新時間
2668 安裝
62 star

Build Status Latest Stable Version PHP Version Require License

A PHP implementation of Nacos OpenAPI for webman plugin

Naocs插件問答帖

http://wtbis.cn/q/9134

常見問題

  1. 什么是Nacos?

    Nacos 致力于幫助您發(fā)現(xiàn)、配置和管理微服務;是微服務/SOA架構(gòu)體系中服務治理環(huán)節(jié)的重要成員服務;簡單的可以把Nacos理解為一個配置中心和一個服務注冊中心。

  2. 什么時候用Nacos?

    • 當我們的服務越來越大、越來越復雜,需要配置的地方越來越多,配置存放的地方也越來越多的時候,為了可以方便統(tǒng)一管理配置,這時候就可以引入Nacos;

    • 當我們的服務越來越多,有些時候部署需要做到彈性伸縮,需要用到一些負載策略的時候,可以引入Nacos進行服務的治理;

簡介

  • Webman-naocs是基于PHP開發(fā)的Webman插件生態(tài)下的Nacos客戶端;

  • 本項目來源于 Tinywan/nacos,對 Tinywan 表示感謝!區(qū)別于 Tinywan/nacos,workbunny/webman-nacos在配置監(jiān)聽和實例注冊上有不同的實現(xiàn)方式,其他的使用方法與之無異;

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

    • workerman/http-client
    • guzzlehttp/guzzle

安裝

composer require workbunny/webman-nacos

使用

1. Nacos文檔地址

2. 服務的使用

  1. 創(chuàng)建連接通道

    // 使用默認通道【建議使用】
    $client = \Workbunny\WebmanNacos\Client::channel();
    // 使用channel.php中鍵名為ABC的連接配置
    $client = \Workbunny\WebmanNacos\Client::channel('ABC');

    注:該方案默認使用channel.php中的連接配置,支持多通道連接,建議使用!
    注:獲取一個不存在的配置信息時,會拋出一個 NacosException 異常。

    // 舊版保留方式【不建議使用】
    $client = new Workbunny\WebmanNacos\Client();

    注:該方案默認使用app.php中的連接配置,后續(xù)會將其移除,不建議繼續(xù)使用!

  2. 以監(jiān)聽配置舉例

    $client = \Workbunny\WebmanNacos\Client::channel();
    // 異步非阻塞監(jiān)聽
    // 注:在webman中是異步非阻塞的,不會阻塞當前進程
    $response = $client->config->listenerAsyncUseEventLoop();
    // 異步阻塞監(jiān)聽
    // 注:在webman中是異步阻塞的,返回的是Guzzle/PromiseInterface,配合wait()可以多條請求并行執(zhí)行;
    //     請求會阻塞在 **wait()** 直到執(zhí)行完畢;詳見 **ConfigListernerProcess.php** 
    $response = $client->config->listenerAsync();
    // 同步阻塞監(jiān)聽
    $response = $client->config->listener();
  3. 斷開連接

    $client = \Workbunny\WebmanNacos\Client::channel();
    $client->cancel();

配置說明:

  1. app.php 為基礎(chǔ)配置;
  2. channel.php 為連接通道配置;
  3. process.php 為默認啟動進程配置;

3. Nacos相關(guān)服務

配置相關(guān):

  • 監(jiān)聽配置

webman-nacos組件默認會啟動一個名為 config-listener 的進程,用于監(jiān)聽在配置文件
plugin/workbunny/webman-nacos/app.phpconfig_listeners
下的配置內(nèi)容。

如果想自行掌控調(diào)用,可以使用如下服務:

$client = \Workbunny\WebmanNacos\Client::channel();

// 異步非阻塞監(jiān)聽
// 注:在webman中是異步非阻塞的,不會阻塞當前進程
$response = $client->config->listenerAsyncUseEventLoop();

// 異步阻塞監(jiān)聽
// 注:在webman中是異步阻塞的,返回的是Guzzle/PromiseInterface,配合wait()可以多條請求并行執(zhí)行;
//     請求會阻塞在 **wait()** 直到執(zhí)行完畢;詳見 **ConfigListernerProcess.php** 
$response = $client->config->listenerAsync();

# 同步阻塞監(jiān)聽
$response = $client->config->listener();
  • 獲取配置
$client = \Workbunny\WebmanNacos\Client::channel();
$response = $client->config->get('database', 'DEFAULT_GROUP');
if (false === $response) {
    var_dump($nacos->config->getMessage());
}
  • 提交配置
$client = \Workbunny\WebmanNacos\Client::channel();
$response = $client->config->publish('database', 'DEFAULT_GROUP', file_get_contents('.env'));
if (false === $response) {
    var_dump($nacos->config->getMessage());
}
  • 移除配置
$client = \Workbunny\WebmanNacos\Client::channel();
$response = $client->config->delete('database', 'DEFAULT_GROUP');;
if (false === $response) {
    var_dump($nacos->config->getMessage());
}

服務相關(guān):

  • 實例注冊

webman-nacos組件默認會啟動一個名為 instance-registrar 的進程,用于注冊在配置文件
plugin/workbunny/webman-nacos/app.phpinstance-registrar
下的配置內(nèi)容。

如需動態(tài)注冊實例,請使用:

$client = \Workbunny\WebmanNacos\Client::channel();
$response = $client->instance->register('127.0.0.1', 8848, '猜猜我是誰', [
    'groupName' => 'DEFAULT_GROUP',
]);
if (false === $response) {
    var_dump($nacos->config->getMessage());
}
  • 移除實例
$client = \Workbunny\WebmanNacos\Client::channel();
$response = $client->instance->delete('猜猜我是誰', 'DEFAULT_GROUP', '127.0.0.1', 8848, []);
if (false === $response) {
    var_dump($nacos->config->getMessage());
}
  • 實例列表
$client = \Workbunny\WebmanNacos\Client::channel();
$response = $client->instance->list('猜猜我是誰', []);
if (false === $response) {
    var_dump($nacos->config->getMessage());
}

注:實例與服務的區(qū)別請參看Nacos文檔;

其他:

  • 具體使用參數(shù)都在源碼內(nèi)已標注,使用方法很簡單,參考Nacos官方文檔即可;

  • 后綴為Async的方法是Guzzle異步請求,在當前業(yè)務執(zhí)行周期中阻塞,多個請求可并行執(zhí)行;

  • 后綴為AsyncUseEventLoop的方法是workerman/http-client異步請求,在當前業(yè)務周期中非阻塞;

$client = \Workbunny\WebmanNacos\Client::channel();

# 配置相關(guān)接口
$client->config;

# 鑒權(quán)相關(guān)接口
$client->auth;

# 實例相關(guān)接口
$client->instance;

# 系統(tǒng)相關(guān)接口
$client->operator;

# 服務相關(guān)接口
$client->service;

說明

  • 目前這套代碼在我司生產(chǎn)環(huán)境運行,我會做及時的維護,歡迎 issue 和 PR

  • 對于不知道Nacos有什么用的/在什么時候用,可以參考這篇文章 Nacos在我司的應用及SOA初嘗;

  • nacos的配置監(jiān)聽項采用了服務端長輪詢,有點類似于stream_select,當配置沒有改變的時候,會阻塞至請求結(jié)束;但當配置有變化時候,會立即返回其配置dataId;這里我的做法是開啟一個Timer對配置進行監(jiān)聽,定時器間隔與長輪詢最大阻塞時間一致:

    1. ConfigListenerProcess使用Guzzle的異步請求對配置監(jiān)聽器進行請求處理,
      onWorkerStart中的Guzzle客戶端會阻塞請求,workerman status中會顯示BUSY狀態(tài);

    2. AsyncConfigListenerProcess使用wokerman/http-client異步請求對配置監(jiān)聽
      器進行請求,workerman/http-client使用了workerman的event-loop進行I/O處理,
      不會阻塞當前進程,推薦使用;

  • 所有的配置同步后會觸發(fā) workerman reload 對所有進程進行重載,保證了config的刷新,包括已經(jīng)在內(nèi)存中的各種單例,如 數(shù)據(jù)庫連接、Redis連接等,保證即時將配置傳達至需要的業(yè)務點;

  • 使用配置方式不必改變,使用webman的config()即可,降低封裝組件的心智負擔;

其他

贊助商