php與微服務

公司的系統根本就沒有容錯機制。所以想到了java微服務。

首先是需要一個註冊中心 getService.php

<?php

    $array = ["produce" => [
                ["url" => "http://127.0.0.1/testSwitch/producer1.php","status" => "1"],
                ["url" => "http://127.0.0.1/testSwitch/producer2.php","status" => "-1"],
                ["url" => "http://127.0.0.1/testSwitch/producer3.php","status" => "-1"],
        ]
    ];
    echo json_encode($array);
?>

三個服務提供者,用status表示狀態。

<?php
//用來測試超時機制
//sleep(120);
echo "producer1";

?>

服務的消費方,調用者。
主要是三步。第一步,獲取可以調用的服務。第二步,選擇一個服務。第三步,調用服務。
如果服務中出現問題,可以通知註冊中心去修改當前服務的狀態,並且同時短信通知到運維人員。這樣可以保證下一次調用是正常。

<?php

function chooseUrl($urls){
    //或者進行異常捕獲
    $url = null;
    foreach($urls as $u){
        if($u['status'] == -1){
            continue;
        }else{
            $url = $u['url'];
        }
    }

    return $url;
}


function getContent($url){
    //或者進行異常捕獲
    //超時機制
    $ctx = stream_context_create(array('http'=>
    array(
        'timeout' => 10, 
        )
    ));
    $content = file_get_contents($url,false,$ctx);    
    return empty($content) ? false : $content;
}



function getServices($serviceName){
    //或者進行異常捕獲
    $services = file_get_contents('http://127.0.0.1/testSwitch/getService.php');
    if(empty($services)){
        return false;
    }

    $services = json_decode($services,true);
    

    $urls = $services[$serviceName];
    return empty($urls) ? false : $urls;
}

function run($serviceName){
    $urls = getServices($serviceName);
    if(!$urls){
        //註冊中心錯誤,maybe異常
        return false;
    }

    $url = chooseUrl($urls);
    if(empty($url)){
        //無可用服務,maybe異常
        return false;
    }


    $content = getContent($url);

    if(empty($content)){
        //服務錯誤,更新服務信息。
        echo $url." 服務錯誤 ";
        return false;
    }

    return $content;

}


$result = run("produce");
if(!$result){
    echo "默認的熔斷機制";
}else{
    echo $result;
}


?>

測試1
圖片描述

結果
圖片描述

這裏就是手動修改註冊中心狀態
圖片描述
結果
圖片描述

在將producer的註釋取消,進行超時測試
圖片描述

服務器上其他的因素導致服務超時。這樣也可以進行狀態變更。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章