이 글에서는 주로 특정 참조 값을 갖는 고유한 RequestID 클래스를 생성하는 PHP를 소개합니다. 이제는 모든 사람과 공유합니다. 도움이 필요한 친구들이 참조할 수 있습니다.
이 글에서는 고유한 RequestID 클래스를 생성하는 PHP를 소개합니다. session_create_id() 사용 및 uniqid() 메서드는 고유성을 보장하고 모든 사람이 배우고 사용할 수 있는 완전한 코드와 데모를 제공합니다.
현재 시스템 디자인은 일반적으로 분산 시스템을 사용합니다. 요청은 처리를 위해 여러 마이크로서비스를 호출하고 최종적으로 결과를 반환할 수 있습니다. 요청에 문제가 있는 경우 어떤 마이크로서비스에 문제가 있는지 추적하기가 어렵습니다.
각 요청이 서버에 액세스할 때 요청 시작 시, 요청 프로세스 도중, 요청 종료 시 고유 식별자(RequestID)를 이 액세스에 추가할 수 있습니다. 이 요청 프로세스는 로그에 기록됩니다(예: 액세스 중 매개변수, 전달된 메서드, 마이크로서비스, 마지막에 반환된 데이터 등). 액세스에 문제가 있을 때 참조로 사용할 수 있습니다. 문제 추적.
예를 들어 요청은 출력을 반환하기 전에 여러 마이크로서비스를 거쳐야 합니다
Request->A->B->C-A->Output
액세스 프로세스에 출력이 없는 경우 또는 출력이 잘못된 경우 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-83E18391EBF9 E1C440AB-FC2C-AC74-E79A-016FD59D9651 AE483861-1040-BE8D-E523-D7638D0F0D35BBD7A03A-36C9-24B7-C453-FB1DDD6E201EBF62C3E6-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
소스코드 다운로드 주소: 클릭하시면 보실 수 있습니다
이 문서에서는 PHP를 소개합니다. 고유한 RequestID 클래스를 생성하고, session_create_id() 및 uniqid() 메서드를 사용하여 고유성을 보장하고, 모든 사람이 배우고 사용할 수 있도록 완전한 코드와 데모를 제공합니다.
현재 시스템 디자인은 일반적으로 분산 시스템을 사용합니다. 요청은 처리를 위해 여러 마이크로서비스를 호출하고 최종적으로 결과를 반환할 수 있습니다. 요청에 문제가 발생하면 어떤 마이크로서비스에 문제가 있는지 추적하기가 어렵습니다.
각 요청이 서버에 액세스할 때 요청 시작 시, 요청 프로세스 도중, 요청 종료 시 고유 식별자(RequestID)를 이 액세스에 추가할 수 있습니다. 이 요청 프로세스는 로그에 기록됩니다(예: 액세스 중 매개변수, 전달된 메서드, 마이크로서비스, 마지막에 반환된 데이터 등). 액세스에 문제가 있을 때 참조로 사용할 수 있습니다. 문제 추적.
예를 들어 요청은 출력을 반환하기 전에 여러 마이크로서비스를 거쳐야 합니다
Request->A->B->C-A->Output
액세스 프로세스에 출력이 없는 경우 또는 출력이 잘못된 경우 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-83E18391EBF9 E1C440AB-FC2C-AC74-E79A-016FD59D9651 AE483861-1040-BE8D-E523-D7638D0F0D35BBD7A03A-36C9-24B7-C453-FB1DDD6E201EBF62C3E6-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
소스코드 다운로드 주소: 클릭하시면 보실 수 있습니다
관련 권장 사항:
위 내용은 PHP는 고유한 RequestID 클래스를 생성합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!