https://blog.csdn.net/fdipzone/article/details/79939431

本文介绍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:

<?php
require 'RequestID.class.php'; // 生成10个请求id
for($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以上的版本才可使用。

关于session_create_id方法可参考官网说明: 
http://php.net/manual/zh/function.session-create-id.php

源码下载地址:点击查看

最新文章

  1. 【转载】Serif和Sans-serif字体的区别
  2. ajax同步的实现
  3. 在 iTunes content中创建新的版本时,出现构建版本后面没有加号。
  4. [DeviceOne开发]-白板的示例
  5. text-align:justify_内容居中对齐
  6. C# Web开发打开下载对话框代码
  7. 图的强连通分量-Kosaraju算法
  8. 读《我是一只IT小小鸟》有感
  9. MYSQLI DEMO
  10. chromium high cpu usage
  11. ARM的启动代码(1):介绍(转)
  12. StringBuffer类的使用
  13. 从此不再担心键盘遮住输入框OC(一)
  14. MyBatis笔试题
  15. 使用Elasticsearch的动态索引和索引优化
  16. SQL 查找存在某内容的存储过程都有哪些
  17. 《HTTP权威指南》1-HTTP概要
  18. vs2017 乱码
  19. SQL语句(十三)多表查询
  20. Jmeter关于上传图片接口

热门文章

  1. Unity文件操作路径
  2. C#实现大数相加
  3. 阿里巴巴Java开发规约插件-体验
  4. Effective C++ Item 17 Store newed objects in smart pointer in standalone statements
  5. 数据库中存储js代码无法json解析
  6. wsdl.exe的用法与参数说明
  7. ios 开发之本地推送
  8. easyui —— footer
  9. thinkjs之页面跳转-同步异步
  10. poj_3579 二分法