現在的系統設計一般使用分布式系統,一個請求可能要調用幾個微服務處理,最后再把結果返回。當請求出現問題時,我們很難去跟蹤是哪個微服務出現問題。
每個請求訪問服務器時,我們可以給這個訪問加入一個唯一標識(RequestID),在請求開始,請求過程中,及請求結束時,把這個請求流程關鍵的數據寫入日志(例如訪問時的參數,經過那些方法,微服務,結束時返回的數據等),當訪問出現問題時用于參考,方便追蹤到問題。
例如一個請求需要經過幾個微服務再返回輸出
請求- A- B- C-A- 輸出
如果訪問過程沒有輸出,或輸出錯誤,我們可以根據RequestID找到A,B,C對應的日志,檢查是哪個服務出現問題。
代碼如下:RequestID.html' target='_blank'>class.php
?php/** * PHP生成唯一RequestID類 * Date: 2018-04-10 * Author: fdipzone * Version: 1.0 * Description: * PHP實現生成唯一RequestID類,使用session_create_id()與uniqid()方法實現,保證唯一性。 * Func: * public generate 生成唯一請求id * private format 格式化請求id */class RequestID{ // class start * 生成唯一請求id * @return String public static function generate(){ // 使用session_create_id()方法創建前綴 $prefix = session_create_id(date( YmdHis // 使用uniqid()方法創建唯一id $request_id = strtoupper(md5(uniqid($prefix, true))); // 格式化請求id return self::format($request_id); } /** * 格式化請求id * @param String $request_id 請求id * @param Array $format 格式 * @return String private static function format($request_id, $format= 8,4,4,4,12 ){ $tmp = array(); $offset = 0; $cut = explode( , , $format); // 根據設定格式化 if($cut){ foreach($cut as $v){ $tmp[] = substr($request_id, $offset, $v); $offset += $v; } // 加入剩余部分 if($offset strlen($request_id)){ $tmp[] = substr($request_id, $offset); } return implode( - , $tmp);} // class end?
demo:
?phprequire RequestID.class.php // 生成10個請求idfor($i=0; $i $i++){ echo RequestID::generate().PHP_EOL;}?
輸出:
16532925-4502-CDAD-23A2-463FC7B5803A500B77AD-CD24-0DDA-9E6E-2FDF2DD7CA94813143D0-958F-9F56-E04F-679598594452E5EE1B0B-E0D6-3E60-D831-462C5A262FCE79E714B5-A37F-4B5E-4EDE-83E18391EBF9E1C440AB-FC2C-AC74-E79A-016FD59D9651AE483861-1040-BE8D-E523-D7638D0F0D35BBD7A03A-36C9-24B7-C453-FB1DDD6E201EBF62C3E6-9C5F-22CB-668D-381863B35268E97E1F44-F048-962A-5BF7-1113727551B1
注意session_create_id方法需要php7.1以上的版本才可使用。
關于session_create_id方法可參考網址說明:
http://php.net/manual/zh/function.session-create-id.php
本文講解了PHP生成唯一RequestID類,更多香啊滾內容請關注php 。
相關推薦:
php json_encode不支持對象私有屬性的解決方法
js 基礎 數據類型及轉換 進制 操作符
JavaScript中 with的用法
以上就是PHP生成唯一RequestID類的相關內容的詳細內容,PHP教程
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答