講解PHP產生唯一RequestID類相關內容

來源:互聯網
上載者:User

本文介紹PHP產生唯一RequestID類,使用session_create_id()與uniqid()方法,保證唯一性,提供完整代碼及示範,方便大家學習使用。

現在的系統設計一般使用分布式系統,一個請求可能要調用幾個微服務處理,最後再把結果返回。當請求出現問題時,我們很難去跟蹤是哪個微服務出現問題。

每個請求訪問伺服器時,我們可以給這個訪問加入一個唯一標識(RequestID),在請求開始,請求過程中,及請求結束時,把這個請求流程關鍵的資料寫入日誌(例如訪問時的參數,經過那些方法,微服務,結束時返回的資料等),當訪問出現問題時用於參考,方便追蹤到問題。

例如一個請求需要經過幾個微服務再返回輸出

請求->A->B->C-A->輸出

如果訪問過程沒有輸出,或輸出錯誤,我們可以根據RequestID找到A,B,C對應的日誌,檢查是哪個服務出現問題。

代碼如下:

RequestID.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<10; $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以上的版本才可使用。

本文講解了PHP產生唯一RequestID類相關內容,更多相關知識請關注php中文網。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.