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

嘗試一下nacos的微服務(wù)

songshu

簡(jiǎn)單的php版本nacos客戶端

安裝

composer require xiaosongshu/nacos

項(xiàng)目地址

https://github.com/2723659854/nacos

客戶端提供的方法

<?php

require_once __DIR__.'/vendor/autoload.php';

$dataId      = 'CalculatorService';
$group       = 'api';
$serviceName = 'father';
$namespace   = 'public';

$client      = new \Xiaosongshu\Nacos\Client('http://127.0.0.1:8848','nacos','nacos');
var_dump("發(fā)布配置");
/** 發(fā)布配置 */
print_r($client->publishConfig($dataId, $group, json_encode(['name' => 'fool', 'bar' => 'ha'])));
var_dump("獲取配置需要稍等一秒左右,否則是404");
/** 獲取配置 */
print_r($client->getConfig($dataId, $group,'public'));

var_dump("監(jiān)聽配置是否發(fā)生了變化,有變化則有返回值,無變化則返回空,同時(shí)監(jiān)聽配置會(huì)阻塞1秒左右");
/** 監(jiān)聽配置 */
print_r($client->listenerConfig($dataId, $group, json_encode(['name' => 'fool', 'bar' => 'ha'])));

var_dump("創(chuàng)建服務(wù),一個(gè)服務(wù)可以有多個(gè)實(shí)例提供,一個(gè)實(shí)例只可以提供 一個(gè)服務(wù),但是我這是服務(wù)于fpm所以可以一個(gè)實(shí)例節(jié)點(diǎn)可以提供多個(gè)服務(wù)");
/** 創(chuàng)建服務(wù) */
print_r($client->createService($serviceName, $namespace, json_encode(['name' => 'tom', 'age' => 15])));

var_dump("給服務(wù)分配一個(gè)實(shí)例,否則服務(wù)是空的,相當(dāng)于餐館沒有廚師提供服務(wù),這里有一個(gè)坑,如果是創(chuàng)建臨時(shí)實(shí)例,則不要?jiǎng)?chuàng)建服務(wù),直接創(chuàng)建實(shí)例并指定為臨時(shí)實(shí)例,否則會(huì)默認(rèn)為永久實(shí)例而發(fā)生沖突");
/** 創(chuàng)建實(shí)例 */
print_r($client->createInstance($serviceName, "192.168.4.110", '9506', $namespace, ['name' => 'tom', 'age' => 15], 50, 1, true));

var_dump("獲取服務(wù)列表,查看nacos上已注冊(cè)了哪些服務(wù)");
/** 獲取服務(wù)列表 */
print_r($client->getServiceList($namespace));

var_dump("查看這個(gè)服務(wù)的詳細(xì)信息");
/** 服務(wù)詳情 */
print_r($client->getServiceDetail($serviceName, $namespace));

var_dump("查看這個(gè)服務(wù)下有哪些實(shí)例可以提供這個(gè)服務(wù),就是類似這個(gè)餐館有哪些廚師可以提供炒菜服務(wù)");
/** 獲取實(shí)例列表 */
print_r($client->getInstanceList($serviceName, $namespace));

var_dump("給臨時(shí)實(shí)例發(fā)送一次心跳,發(fā)送心跳的參數(shù)必須和創(chuàng)建實(shí)例的參數(shù)一致才可以,否則實(shí)例不健康");
/** 發(fā)送心跳 */
sleep(1);print_r($client->sendBeat($serviceName, '192.168.4.110', '9506', $namespace,['name' => 'tom', 'age' => 15], true,50));
var_dump("發(fā)送心跳之后,再次獲取實(shí)例列表,確認(rèn)健康狀態(tài)");
print_r($client->getInstanceList($serviceName, $namespace));

var_dump("獲取實(shí)例的詳情");

/** 獲取實(shí)例詳情 */
print_r($client->getInstanceDetail($serviceName, true, '192.168.4.110', '9506'));

var_dump("移除某一個(gè)實(shí)例,要?jiǎng)h除的實(shí)例必須和當(dāng)初創(chuàng)建的實(shí)例的參數(shù)一致才可以刪除");
/** 移除實(shí)例*/
print_r($client->removeInstance($serviceName, '192.168.4.110', 9505, $namespace, true));

應(yīng)用舉例

監(jiān)聽配置

你可以編寫一個(gè)listen.php文件,內(nèi)容如下:

<?php

require_once __DIR__.'/vendor/autoload.php';

$dataId      = 'CalculatorService';
$group       = 'api';
$serviceName = 'father';
$namespace   = 'public';
$client      = new \Xiaosongshu\Nacos\Client('http://127.0.0.1:8848','nacos','nacos');
var_dump("發(fā)布配置");
/** 發(fā)布配置 */
$client->publishConfig($dataId, $group, json_encode(['name' => 'fool', 'bar' => 'ha']));
//todo 這個(gè)時(shí)候你可以手動(dòng)到nacos服務(wù)器上修改一下配置,查看結(jié)果
while (true){
    sleep(1);
    $listener = $client->listenerConfig($dataId, $group, json_encode(['name' => 'fool', 'bar' => 'ha']));
    if ($listener['content']){
        var_dump("配置發(fā)生了變化",$listener['content']);
        $newConfigContent = $client->getConfig($dataId, $group,'public');
        var_dump($newConfigContent);
        //todo 將配置寫入你的文件或者加載到內(nèi)存即可
    }else{
        var_dump("配置沒有變化");
    }
}

執(zhí)行命令可以測(cè)試配置變化

php listen.php

注冊(cè)發(fā)布服務(wù)

你可以編寫一個(gè)server.php文件,內(nèi)容如下

<?php

require_once __DIR__.'/vendor/autoload.php';
require_once __DIR__."/DemoService.php";
require_once __DIR__."/LoginService.php";

use Xiaosongshu\Nacos\Server;

// 加載配置文件
$config = require 'config.php';

// 啟動(dòng)服務(wù)

try{
    $server = new Server($config);
    $server->run();
}catch (\Throwable $exception){
    var_dump($exception->getMessage(),$exception->getLine(),$exception->getFile());
}

其中配置文件config.php,內(nèi)容如下:

<?php

return [

    /** 連接服務(wù)器的基本配置 */
    'server'=>[
        'host'=>'http://192.168.110.72:8848',
        'username'=>'nacos',
        'password'=>'nacos',
    ],

    /** 服務(wù)提供者實(shí)例的配置 */
    'instance'=>[
        'ip'=>'192.168.110.72',
        'port'=>'8000',
        'weight'=>99,
    ],

    /** 需要監(jiān)聽的配置 */
    'config'=>[
        'first'=>[
            'enable'=>true,
            'dataId'=>'default',
            'group'=>'default',
            'content'=> [
                'username'=>'tom',
                'password'=>'123456',
                'age'=>25
            ],
        ]
    ],

    /** 需要注冊(cè)的服務(wù) */
    'service'=>[

        // 服務(wù)標(biāo)識(shí):demo
        'demo'=>[
            'enable'=>true,
            'serviceName'=>\Xiaosongshu\Nacos\Samples\DemoService::class,
            'namespace'=>'public',
        ],

        // 服務(wù)標(biāo)識(shí):login
        'login' => [
            'enable' => true,
            'serviceName' => \Xiaosongshu\Nacos\Samples\LoginService::class, // 實(shí)際實(shí)現(xiàn)類
            'namespace' => 'public',
            # 契約 也就是功能映射,客戶端只關(guān)心調(diào)用login功能,不關(guān)心具體是執(zhí)行哪個(gè)方法
            'contract' => [
                'out' => 'logout'
            ]
        ]
    ]
];

而服務(wù)提供者DemoService.php內(nèi)容如下

<?php
namespace Xiaosongshu\Nacos\Samples;

/**
 * @purpose 示例服務(wù)提供者
 * @author yanglong
 * @time 2025年7月25日12:16:19
 */
class DemoService
{

    /**
     * 示例方法:添加用戶信息
     * @param string $name 姓名
     * @param int $age 年齡
     * @return string
     */
    public function add(string $name, int $age): string
    {
        return "用戶添加成功!姓名:{$name},年齡:{$age}(服務(wù)端處理時(shí)間:" . date('H:i:s') . ")";
    }

    /**
     * 示例方法:獲取用戶信息
     * @param string $name 姓名
     * @return array
     */
    public function get(string $name): array
    {
        return [
            'name' => $name,
            'age' => 25,
            'message' => "查詢成功(服務(wù)端時(shí)間:" . date('H:i:s') . ")"
        ];
    }
}

服務(wù)提供者LoginService.php內(nèi)容如下:

<?php

namespace Xiaosongshu\Nacos\Samples;

/**
 * @purpose 用戶登錄服務(wù)
 * @author yanglong
 * @time 2025年7月25日17:32:27
 */
class LoginService
{
    /**
     * 用戶登錄接口
     * @param string $username 用戶名(必填,長(zhǎng)度≥3)
     * @param string $password 密碼(必填,長(zhǎng)度≥6)
     * @return array 登錄結(jié)果,包含token
     */
    public function login(string $username, string $password): array
    {
        // 模擬業(yè)務(wù)邏輯:驗(yàn)證用戶名密碼
        if (strlen($username) < 3) {
            return ['success' => false, 'message' => '用戶名長(zhǎng)度不能少于3位'];
        }
        if (strlen($password) < 6) {
            return ['success' => false, 'message' => '密碼長(zhǎng)度不能少于6位'];
        }

        // 模擬生成token
        $token = md5($username . time() . 'secret');
        return [
            'success' => true,
            'message' => '登錄成功',
            'token' => $token,
            'expire' => 3600 // token有效期(秒)
        ];
    }

    /**
     * 退出登錄
     * @param string $token
     * @return array
     */
    public function logout(string $token): array{
        return [
            'success' => true,
            'message' => '退出登錄成功',
            'token' => $token,
        ];
    }
}

編寫完以上文件后,開啟服務(wù),命令如下:

php server.php

這個(gè)時(shí)候我們?cè)倬帉懸粋€(gè)客戶端client.php,用來測(cè)試調(diào)用服務(wù)。內(nèi)容如下:

<?php

// 使用示例
require_once __DIR__ . '/vendor/autoload.php';

use Xiaosongshu\Nacos\JsonRpcClient;

// Nacos配置(與服務(wù)端一致)
$nacosConfig = [
    'host' => 'http://192.168.110.72:8848',
    'username' => 'nacos',
    'password' => 'nacos'
];

$client = new JsonRpcClient($nacosConfig);

// 調(diào)用login服務(wù)(僅需傳入服務(wù)標(biāo)識(shí)和業(yè)務(wù)參數(shù))
$loginResult = $client->call('login', [
    'username' => 'zhangsan',
    'password' => '123456'
]);

// 打印結(jié)果
if ($loginResult['success']) {
    echo "登錄成功:\n";
    echo "Token:{$loginResult['result']['token']}\n";
    echo "有效期:{$loginResult['result']['expire']}秒\n";
    echo "調(diào)用實(shí)例:{$loginResult['instance']}\n";
} else {
    echo "登錄失?。簕$loginResult['error']}\n";
}

// 退出登錄 使用契約
$logoutRes = $client->call('login', ['token' => $loginResult['result']['token']], 'out');
if ($logoutRes['success']) {
    echo "退出登錄成功:\n";
    echo "Token:{$logoutRes['result']['token']}\n";
    echo "調(diào)用實(shí)例:{$logoutRes['instance']}\n";
} else {
    echo "退出登錄失敗:{$logoutRes['error']}\n";
}

// 3. 調(diào)用DemoService的add方法(添加用戶)
$addResult = $client->call(
    'demo', // 服務(wù)標(biāo)識(shí)(對(duì)應(yīng)服務(wù)端配置中的serviceKey)
    [
        'name' => '張三',  // 對(duì)應(yīng)add方法的$name參數(shù)
        'age' => 20        // 對(duì)應(yīng)add方法的$age參數(shù)
    ],
    'add' // 要調(diào)用的方法名(DemoService的add方法)
);

// 處理add方法結(jié)果
if ($addResult['success']) {
    echo "添加用戶結(jié)果:{$addResult['result']}\n";
    echo "調(diào)用的服務(wù)實(shí)例:{$addResult['instance']}\n\n";
} else {
    echo "添加用戶失?。簕$addResult['error']}\n\n";
}

// 4. 調(diào)用DemoService的get方法(查詢用戶)
$getResult = $client->call(
    'demo', // 服務(wù)標(biāo)識(shí)(不變)
    [
        'name' => '張三'  // 對(duì)應(yīng)get方法的$name參數(shù)
    ],
    'get' // 要調(diào)用的方法名(DemoService的get方法)
);

// 處理get方法結(jié)果
if ($getResult['success']) {
    echo "查詢用戶結(jié)果:\n";
    print_r($getResult['result']); // 打印數(shù)組結(jié)果
    echo "調(diào)用的服務(wù)實(shí)例:{$getResult['instance']}\n";
} else {
    echo "查詢用戶失敗:{$getResult['error']}\n";
}

現(xiàn)在需要啟動(dòng)客戶端來測(cè)試服務(wù)是否可用。命令如下:

php client.php

那么服務(wù)端測(cè)試結(jié)果大概效果是這樣子的

PS D:\php\nacosServer> php .\server.php
[初始化] 已加載服務(wù):demo -> Xiaosongshu\Nacos\Samples\DemoService(元數(shù)據(jù)解析完成)
[初始化] 已加載服務(wù):login -> Xiaosongshu\Nacos\Samples\LoginService(元數(shù)據(jù)解析完成)
[Nacos] 已注冊(cè)服務(wù):demo -> SERVICE@@demo(IP:192.168.110.72:8000)
[Nacos] 已注冊(cè)服務(wù):login -> SERVICE@@login(IP:192.168.110.72:8000)
[TCP服務(wù)] 已啟動(dòng),監(jiān)聽:192.168.110.72:8000(JSON-RPC協(xié)議)
[心跳] 成功(demo)=>Xiaosongshu\Nacos\Samples\DemoService(18:52:45)
[心跳] 成功(login)=>Xiaosongshu\Nacos\Samples\LoginService(18:52:45)
[TCP] 新客戶端連接:192.168.110.72:50210(clientId:80)
[TCP] 收到請(qǐng)求(192.168.110.72:50210):{"jsonrpc":"2.0","method":"login.login","params":["zhangsan","123456"],"id":"rpc_688361ffce388"}
[TCP] 發(fā)送響應(yīng)(192.168.110.72:50210):{"jsonrpc":"2.0","id":"rpc_688361ffce388","result":{"success":true,"message":"登錄成功","token":"2d7b6bd23bd38d6051bf06a2d55c6eca","expire":3600}}
[TCP] 新客戶端連接:192.168.110.72:50211(clientId:81)
[TCP] 客戶端斷開(192.168.110.72:50210)
[TCP] 收到請(qǐng)求(192.168.110.72:50211):{"jsonrpc":"2.0","method":"login.out","params":["2d7b6bd23bd38d6051bf06a2d55c6eca"],"id":"rpc_688361ffd588a"}
[TCP] 發(fā)送響應(yīng)(192.168.110.72:50211):{"jsonrpc":"2.0","id":"rpc_688361ffd588a","result":{"success":true,"message":"退出登錄成功","token":"2d7b6bd23bd38d6051bf06a2d55c6eca"}}
[TCP] 新客戶端連接:192.168.110.72:50212(clientId:82)
[TCP] 客戶端斷開(192.168.110.72:50211)
[TCP] 收到請(qǐng)求(192.168.110.72:50212):{"jsonrpc":"2.0","method":"demo.add","params":["張三",20],"id":"rpc_688361ffe22fa"}
[TCP] 發(fā)送響應(yīng)(192.168.110.72:50212):{"jsonrpc":"2.0","id":"rpc_688361ffe22fa","result":"用戶添加成功!姓名:張三,年齡:20(服務(wù)端處理時(shí)間:18:52:47)"}
[TCP] 新客戶端連接:192.168.110.72:50213(clientId:83)
[TCP] 客戶端斷開(192.168.110.72:50212)
[TCP] 收到請(qǐng)求(192.168.110.72:50213):{"jsonrpc":"2.0","method":"demo.get","params":["張三"],"id":"rpc_688361ffed00a"}
[TCP] 發(fā)送響應(yīng)(192.168.110.72:50213):{"jsonrpc":"2.0","id":"rpc_688361ffed00a","result":{"name":"張三","age":25,"message":"查詢成功(服務(wù)端時(shí)間:18:52:47)"}}
[TCP] 客戶端斷開(192.168.110.72:50213)
[心跳] 成功(demo)=>Xiaosongshu\Nacos\Samples\DemoService(18:52:50)
[心跳] 成功(login)=>Xiaosongshu\Nacos\Samples\LoginService(18:52:50)

客戶端的效果是這個(gè)樣子的

PS D:\php\nacosServer> php .\client.php
登錄成功:
Token:2d7b6bd23bd38d6051bf06a2d55c6eca
有效期:3600秒
調(diào)用實(shí)例:192.168.110.72:8000
退出登錄成功:
Token:2d7b6bd23bd38d6051bf06a2d55c6eca
調(diào)用實(shí)例:192.168.110.72:8000
添加用戶結(jié)果:用戶添加成功!姓名:張三,年齡:20(服務(wù)端處理時(shí)間:18:52:47)
調(diào)用的服務(wù)實(shí)例:192.168.110.72:8000

查詢用戶結(jié)果:
Array
(
    [name] => 張三
    [age] => 25
    [message] => 查詢成功(服務(wù)端時(shí)間:18:52:47)
)
調(diào)用的服務(wù)實(shí)例:192.168.110.72:8000

以上代碼親測(cè)可用,當(dāng)然你可能需要根據(jù)你的實(shí)際業(yè)務(wù)調(diào)整一下才行。
<br>

以上就是全部用法,你可以將此服務(wù)集成到現(xiàn)有的框架中,比如thinkphp,laravel,webman等等。我為什么要這么寫呢?因?yàn)槲覀兊捻?xiàng)目是tp3.2+tp5.1+webman2和laravel混合在一起的。

寫在最后的話

我是菜鳥,我感覺這么寫好像不對(duì),但是又不知道具體哪里不對(duì)。對(duì)nacos不是很清除。求高手幫忙修改。

最后的最后

你可能需要開啟socket擴(kuò)展才能正常使用,如果遇到高并發(fā),可能需要安裝event擴(kuò)展。

335 1 0
1個(gè)評(píng)論

Tinywan

http://m.wtbis.cn/plugin/50

現(xiàn)成的插件不香嗎?

  • 暫無評(píng)論

songshu

450
積分
0
獲贊數(shù)
0
粉絲數(shù)
2022-06-23 加入
??