国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

PHP實(shí)現(xiàn)的生成唯一RequestID類完整示例

2024-05-05 00:04:30
字體:
供稿:網(wǎng)友

本文實(shí)例講述了PHP實(shí)現(xiàn)的生成唯一RequestID類。分享給大家供大家參考,具體如下:

這里介紹PHP生成唯一RequestID類,使用session_create_id()與uniqid()方法,保證唯一性,提供完整代碼及演示,方便大家學(xué)習(xí)使用。

現(xiàn)在的系統(tǒng)設(shè)計(jì)一般使用分布式系統(tǒng),一個(gè)請(qǐng)求可能要調(diào)用幾個(gè)微服務(wù)處理,最后再把結(jié)果返回。當(dāng)請(qǐng)求出現(xiàn)問題時(shí),我們很難去跟蹤是哪個(gè)微服務(wù)出現(xiàn)問題。

每個(gè)請(qǐng)求訪問服務(wù)器時(shí),我們可以給這個(gè)訪問加入一個(gè)唯一標(biāo)識(shí)(RequestID),在請(qǐng)求開始,請(qǐng)求過程中,及請(qǐng)求結(jié)束時(shí),把這個(gè)請(qǐng)求流程關(guān)鍵的數(shù)據(jù)寫入日志(例如訪問時(shí)的參數(shù),經(jīng)過那些方法,微服務(wù),結(jié)束時(shí)返回的數(shù)據(jù)等),當(dāng)訪問出現(xiàn)問題時(shí)用于參考,方便追蹤到問題。

例如一個(gè)請(qǐng)求需要經(jīng)過幾個(gè)微服務(wù)再返回輸出

請(qǐng)求->A->B->C-A->輸出

如果訪問過程沒有輸出,或輸出錯(cuò)誤,我們可以根據(jù)RequestID找到A,B,C對(duì)應(yīng)的日志,檢查是哪個(gè)服務(wù)出現(xiàn)問題。

代碼如下:

RequestID.class.php

<?php/** * PHP生成唯一RequestID類 * Date: 2018-04-10 * Author: fdipzone * Version: 1.0 * * Description: * PHP實(shí)現(xiàn)生成唯一RequestID類,使用session_create_id()與uniqid()方法實(shí)現(xiàn),保證唯一性。 * * Func: * public generate 生成唯一請(qǐng)求id * private format 格式化請(qǐng)求id */class RequestID{ // class start /**  * 生成唯一請(qǐng)求id  * @return String  */ public static function generate(){  // 使用session_create_id()方法創(chuàng)建前綴  $prefix = session_create_id(date('YmdHis'));  // 使用uniqid()方法創(chuàng)建唯一id  $request_id = strtoupper(md5(uniqid($prefix, true)));  // 格式化請(qǐng)求id  return self::format($request_id); } /**  * 格式化請(qǐng)求id  * @param String $request_id 請(qǐng)求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);  // 根據(jù)設(shè)定格式化  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個(gè)請(qǐng)求idfor($i=0; $i<10; $i++){ echo RequestID::generate().PHP_EOL;}?>

輸出:

16532925-4502-CDAD-23A2-463FC7B5803A
500B77AD-CD24-0DDA-9E6E-2FDF2DD7CA94
813143D0-958F-9F56-E04F-679598594452
E5EE1B0B-E0D6-3E60-D831-462C5A262FCE
79E714B5-A37F-4B5E-4EDE-83E18391EBF9
E1C440AB-FC2C-AC74-E79A-016FD59D9651
AE483861-1040-BE8D-E523-D7638D0F0D35
BBD7A03A-36C9-24B7-C453-FB1DDD6E201E
BF62C3E6-9C5F-22CB-668D-381863B35268
E97E1F44-F048-962A-5BF7-1113727551B1

注意session_create_id方法需要php7.1以上的版本才可使用。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到PHP教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 汉川市| 额尔古纳市| 苏尼特右旗| 平潭县| 云阳县| 陆川县| 高邑县| 璧山县| 呼伦贝尔市| 吴堡县| 长白| 邹平县| 宜昌市| 嘉兴市| 太仆寺旗| 连云港市| 静安区| 古田县| 南郑县| 永年县| 加查县| 准格尔旗| 泗洪县| 柳州市| 顺义区| 缙云县| 兴山县| 马山县| 平利县| 武功县| 仲巴县| 盐津县| 吴川市| 威海市| 微山县| 永定县| 华宁县| 呼伦贝尔市| 津市市| 罗江县| 尖扎县|