











前面讲了赋码、验真、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 领域驱动设计的威力。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。