用 PHP 实现的生成唯一 RequestID 类的完整示例

 2024-03-06 04:03:21  阅读 0

生成用 PHP 实现的唯一类的完整示例

本文描述了用 PHP 实现的独特类的生成。 分享给大家,供大家参考,具体如下:

这里介绍PHP生成唯一类,使用()和()方法保证唯一性,并提供完整的代码和演示供大家学习和使用。

目前的系统设计普遍采用分布式系统。 一个请求可能会调用多个微服务进行处理,最后返回结果。 当请求出现问题时,我们很难追踪到是哪个微服务出现了问题。

当每个请求访问服务器时,我们可以为访问添加唯一标识符()。 在请求开始时、请求过程中、请求结束时,将请求过程的关键数据写入日志(比如访问时的参数、之后的那些方法、微服务、返回的数据)结尾等)供出现访问问题时参考,方便问题跟踪。

例如,一个请求在返回输出之前需要经过多个微服务。

请求->A->B->CA->输出

如果访问过程中没有输出,或者输出错误,我们可以找到A、B、C对应的日志来查看是哪个服务出现了问题。

代码如下所示:

.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

演示:

<?php
require 'RequestID.class.php';
// 生成10个请求id
for($i=0; $i<10; $i++){
echo RequestID::generate().PHP_EOL;
}
?>

输出:

-4502-CDAD-23A2-

-CD24-0DDA-9E6E-

-958F-9F56-E04F-

-E0D6-3E60-D831-

-A37F-4B5E-4EDE-

-FC2C-AC74-E79A-

-1040-BE8D-E523-

-36C9-24B7-C453-

-9C5F-22CB-668D-

-F048-962A-5BF7-

注意该方法需要使用php7.1以上版本。

方法请参考官网说明:

标签: 请求 生成 唯一

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码