ID 生成器的需求背景介绍
ID 中文翻译为标识Identifier ,这个概念在生活,工作中随处可见,比如身份证、商业条形码、二维码、车牌号、驾照号。聚焦到软件开发中,ID 常用来标识一些业务信息的唯一标识,比如订单的单号或者数据库中的唯一主键,比如地址中ID 字段(实际上时没有业务含义的,对用户来说时透明的,不需要关注)
假设你正在参加一个后端的业务系统开发,为了方便在请求出错时排查问题,我们在编写代码的额时候,会在关键路径上打印日志。某个请求出错之后,我们希望能所说出这个请求对应的日志。 以此日志来查问题的原因。而实际情况时,不同的请求的日志会交织在一起,如果没有东西来标识那些日志属于同一个请求,我们就无法关联同一个请求的所有日志。
这听起来像微服务中心的调用链追踪。不过微服务中的调用链追踪时服务间的追踪,我们现在要实现的时服务内的追踪。
借鉴微服务调用链追钟的实现思路,我们可以给每个请求分配一个唯一的Id,并且保存在请求的上下文中,比u,处理请求的工作线程的局部变量中。在java 语言中,我们可以把Id 存储在ThreadLocal 中,或者利用Sl4j 日志框架的MDC (Mapped Diagnostic Contexts) 来实现(实际上底层也是基于ThreadLocal).每次打印日志的时候,我们从球球上下文中取出请求Id,跟日志一块输出。这样,同一个请求的所有日志都包含在同样的请求ID 信息,我们可以公国请求ID 来搜索同一个请求的所有日志了。
好了需求背景,我们已经讲解清楚了,至于具体如何实现整个需求,我们就不具体展开讲解了,如果你感兴趣的化,可以自己试着去设计实现以下。我们接下来只关注ID 这部分功能的开发。
一份能用的代码实现
标签:请求,代码,生成器,我们,日志,设计模式,ID From: https://www.cnblogs.com/dousil/p/18043038