惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
DataBreaches.Net
Y
Y Combinator Blog
I
InfoQ
Recent Announcements
Recent Announcements
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - Franky
IT之家
IT之家
H
Help Net Security
月光博客
月光博客
S
SegmentFault 最新的问题
B
Blog
aimingoo的专栏
aimingoo的专栏
GbyAI
GbyAI
P
Proofpoint News Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
G
Google Developers Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
U
Unit 42
Vercel News
Vercel News
博客园 - 叶小钗
Microsoft Security Blog
Microsoft Security Blog
腾讯CDC
Jina AI
Jina AI
T
The Blog of Author Tim Ferriss

博客园 - 程序员李铁牛

赛事报名系统开发总管理中心规划 赛事报名系统开发:角色与权限体系设计 赛事系统报名接龙高并发技术细节处理浅析 档案数字化研发手记:PDF合并内存溢出踩坑 纸质档案数字化管理系统研发手记:法院诉讼档案单套制落地案例复盘——从纸质卷宗到电子卷宗 档案数字化管理系统开发手记:人事档案专项审核与数字化的系统支撑——"凡提必审"下的技术要点 档案数字化研发手记:我们的技术栈选择——档案系统前后端选型理由(含一次"炫技"的教训) 社群团购系统开发分享——工程化(下):资金支付测试策略——资金模块 100% 覆盖,其他 60% 就够 社群团购系统类快团团源码开发——工程化(上):一套让 5 人小团队不出事故的开发规范 社群团购类快团团系统开发——RBAC 权限设计源码分析:当一个微信号有 4 种身份时怎么办 社群团购系统类快团团模式开发——微信小程序登录:code2Session 之后还有 5 件事要做 数字档案管理系统化研发手记:医院病历档案数字化——合规、病案首页 OCR 与调阅提速 数字档案系统研发手记:批量扫描任务调度——TWAIN/SANE 采集驱动的封装实践 档案数字化系统研发源码手记:置信度过滤——把 97% 识别率变成真正可交付的成果 档案数字化开发实例手记:盖章遮挡文字识别恢复 景区运营预约系统开发:景区会员体系怎么搭?3级会员模型+积分玩法 景区门票预约系统全渠道平台库存数据同步技术处理方式 系统宕机了怎么办?景区票务系统应急预案模板 景区门票预约系统开发:接入AI预测客流设计思路分析 景区预约系统开发总结:门票分时预约设计原理和落地方法 设备运维管理系统开发实战:用规则引擎实现可配置的设备告警策略自研轻量引擎 vs Drools 落地对比 设备维修保养系统预测性维护不用深度学习?设备健康度评分的务实实现方案 档案数字化管理系统研发手记:档案权限模型——全宗-门类-案卷-文件四级控制的设计与实践 档案管理信息化系统研发手记:数字水印方案对比——可见水印 vs 盲水印(档案借阅防泄露) 景区票务系统开发实例分析:上云还是本地部署?6个维度判断 档案数字化系统源码研发手记:老旧档案去污点——中值滤波与 inpainting 效果对比 景区门票预约系统票务系统的6个核心模块 景区上线门票预约系统的5个常见翻车点 景区门票预约系统之人脸识别 vs 身份证核验 vs 扫码入园,哪种最适合你? 景区门票预约系统开发深度解析之定价策略功能设计
一物一码防伪溯源系统开发全栈源码串联一次扫码的完整链路追...
程序员李铁牛 · 2026-08-25 · via 博客园 - 程序员李铁牛

一、把前面所有模块串起来

前面讲了赋码、验真、Redis 码池、区块链、风控、前端。这一篇走读一次扫码的完整链路,看前端到后端到链上如何协作。

二、链路全景

[前端小程序] 扫码 → /verify?code=X
   ↓
[网关] JWT 鉴权 + 限流
   ↓
[验真服务] 查 Redis → 回源 DB(分片)→ 写缓存 → 发 Kafka 事件
   ↓                              ↓
[风控服务] 消费事件 → 规则引擎 → 异地高频? → 封禁
[追溯服务] 消费事件 → 追加履历
[分析服务] 消费事件 → 用户画像
[会员服务] 消费事件 → 积分/留资
   ↓
[区块链] 关键节点哈希上链(出厂/抽检)
   ↓
[前端] 返回验真结果 + 钩子(红包/留资)

三、关键代码走读

前端(Day 47):扫码 → wx.request(/verify) → 成功弹钩子。

验真服务(Day 35)

public VerifyResult verify(String code) {
    String cached = redis.get("verify:" + code);     // 1. 查缓存
    if (cached != null) return parse(cached);
    CodeEntity e = mapper.selectByCode(code);        // 2. 回源分片
    if (e == null) return unknown();
    redis.set("verify:" + code, serialize(e), 10, MIN); // 3. 回填
    kafka.send("scan-event", buildEvent(code, e));    // 4. 异步事件
    return build(e);
}

事件消费(追溯域)

@KafkaListener(topics = "scan-event")
public void onScan(ScanEvent e) {
    traceService.append(e.getCode(),            // 追加履历
        new TraceEvent(e.getCode(), "SCAN", e.getScanGeo(), now()));
    riskService.check(e);                        // 风控检查
    memberService.accrue(e.getMemberId());       // 积分
}

区块链(Day 41):仅关键节点(出厂/抽检)调用 contract.anchor(hash)

四、全链路追踪(排查问题)

// 每个请求带 traceId,跨服务传递
String traceId = MDC.get("traceId");
// SkyWalking 自动串联:前端 → 网关 → 验真 → Kafka → 各域

解读:用 SkyWalking + traceId,一次扫码的全链路耗时、各域状态一目了然,是 Day 7 故障排查的利器。

五、小结

一次扫码,背后是6 个域通过 Kafka 协作。解耦带来可扩展,事件驱动带来实时性。这就是 Day 6 领域驱动设计的威力。