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

【workbunny】Nacos客戶端

1.3.3 版本
2025-05-09 版本更新時(shí)間
2528 安裝
62 star

Build Status Latest Stable Version PHP Version Require License

A PHP implementation of Nacos OpenAPI for webman plugin

Naocs插件問(wèn)答帖

http://www.wtbis.cn/q/9134

常見(jiàn)問(wèn)題

  1. 什么是Nacos?

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

  2. 什么時(shí)候用Nacos?

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

    • 當(dāng)我們的服務(wù)越來(lái)越多,有些時(shí)候部署需要做到彈性伸縮,需要用到一些負(fù)載策略的時(shí)候,可以引入Nacos進(jìn)行服務(wù)的治理;

簡(jiǎn)介

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

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

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

    • workerman/http-client
    • guzzlehttp/guzzle

安裝

composer require workbunny/webman-nacos

使用

1. Nacos文檔地址

2. 服務(wù)的使用

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

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

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

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

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

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

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

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

配置說(shuō)明:

  1. app.php 為基礎(chǔ)配置;
  2. channel.php 為連接通道配置;
  3. process.php 為默認(rèn)啟動(dòng)進(jìn)程配置;

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

配置相關(guān):

  • 監(jiān)聽(tīng)配置

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

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

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

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

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

# 同步阻塞監(jiān)聽(tīng)
$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());
}

服務(wù)相關(guān):

  • 實(shí)例注冊(cè)

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

如需動(dòng)態(tài)注冊(cè)實(shí)例,請(qǐng)使用:

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

注:實(shí)例與服務(wù)的區(qū)別請(qǐng)參看Nacos文檔;

其他:

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

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

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

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

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

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

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

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

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

說(shuō)明

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

  • 對(duì)于不知道Nacos有什么用的/在什么時(shí)候用,可以參考這篇文章 Nacos在我司的應(yīng)用及SOA初嘗;

  • nacos的配置監(jiān)聽(tīng)項(xiàng)采用了服務(wù)端長(zhǎng)輪詢(xún),有點(diǎn)類(lèi)似于stream_select,當(dāng)配置沒(méi)有改變的時(shí)候,會(huì)阻塞至請(qǐng)求結(jié)束;但當(dāng)配置有變化時(shí)候,會(huì)立即返回其配置dataId;這里我的做法是開(kāi)啟一個(gè)Timer對(duì)配置進(jìn)行監(jiān)聽(tīng),定時(shí)器間隔與長(zhǎng)輪詢(xún)最大阻塞時(shí)間一致:

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

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

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

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

其他

贊助商