当前位置: 首页 > news >正文

go: Fan-In Pattern

项目结构:

image

 Fan-In 模式本质:多数据源 → 统一接收器,完美匹配珠宝全流程「多环节、单数据中心」场景
架构设计
核心分层(5 层架构)
配置层(config):全局配置、常量
消息层(message):统一消息结构体、数据格式
业务层(process):各业务模块(单一职责)
核心层(core):Fan-In 队列、Sink 接收器、线程管理
启动层(main):项目入口、编排启动

/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Fan-In Pattern Fan-In(扇入)模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/20 7:33
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : settings.go
*/
package config// 配置层
const (QueueSize  = 100          // 通道容量MinProcess = 0.3          // 最小业务耗时MaxProcess = 1.2          // 最大业务耗时EndSignal  = "SYSTEM_END" // 结束标识
)/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Fan-In Pattern Fan-In(扇入)模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/20 7:34
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : business_msg.go
*/
package message// 消息层 实体
// BusinessMessage 统一业务消息结构体
type BusinessMessage struct {ProcessName string  // 业务环节TaskName    string  // 任务名称TaskDetails string  // 任务详情Timestamp   float64 // 时间戳Status      string  // 状态
}/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Fan-In Pattern Fan-In(扇入)模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/20 7:35
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : fanin.go
*/
package coreimport ("godesginpattern/fanin/config""godesginpattern/fanin/message"
)// 核心队列
// 全局单例 Fan-In 通道
var FanInChan = make(chan any, config.QueueSize)// SendMsg 发送业务消息
func SendMsg(msg message.BusinessMessage) {FanInChan <- msg
}// SendEndSignal 发送结束信号
func SendEndSignal() {FanInChan <- config.EndSignal
}/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Fan-In Pattern Fan-In(扇入)模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/20 7:36
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : sink.go
*/
package coreimport ("fmt""godesginpattern/fanin/config""godesginpattern/fanin/message""time"
)// 工作接收器
// WorkSink 数据中心接收器(单例)
type WorkSink struct {TotalCount  intProcessStat map[string]int
}var Sink = &WorkSink{ProcessStat: make(map[string]int),
}// Run 启动接收器
func (w *WorkSink) Run() {fmt.Println("==========================================================================================")fmt.Println("🏢 【企业级】珠宝业务数据中心已启动 - Fan-In 工作接收器")fmt.Println("==========================================================================================")for data := range FanInChan {switch val := data.(type) {case string:if val == config.EndSignal {w.printReport()return}case message.BusinessMessage:w.handleMsg(val)}time.Sleep(100 * time.Millisecond)}
}// handleMsg 处理单条消息
func (w *WorkSink) handleMsg(msg message.BusinessMessage) {w.TotalCount++w.ProcessStat[msg.ProcessName]++fmt.Printf("📊 接收 | %-10s | 任务:%-20s | 状态:%s\n",msg.ProcessName, msg.TaskName, msg.Status)
}// printReport 输出汇总报告
func (w *WorkSink) printReport() {fmt.Println("\n==========================================================================================")fmt.Println("📈 珠宝全流程业务汇总报告")fmt.Println("==========================================================================================")fmt.Printf("✅ 总处理任务数:%d\n", w.TotalCount)for name, count := range w.ProcessStat {fmt.Printf("   「%s」:%d 项\n", name, count)}fmt.Println("==========================================================================================")
}

  

/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Fan-In Pattern Fan-In(扇入)模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/20 7:37
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : base.go
*/
package processimport ("godesginpattern/fanin/config""godesginpattern/fanin/core""godesginpattern/fanin/message""math/rand""time"
)//业务基类// Process 业务接口(所有业务环节必须实现)
type Process interface {Name() stringTaskList() []stringExecute()
}// Prcess 基础业务逻辑
type BaseProcess struct {processName stringtasks       []string
}func NewBaseProcess(name string, tasks []string) BaseProcess {return BaseProcess{processName: name,tasks:       tasks,}
}// Name 业务名称
func (b *BaseProcess) Name() string {return b.processName
}// TaskList 任务列表
func (b *BaseProcess) TaskList() []string {return b.tasks
}// Execute 执行业务(通用逻辑)
func (b *BaseProcess) Execute() {for _, task := range b.TaskList() {// 模拟业务耗时sleepTime := config.MinProcess + rand.Float64()*(config.MaxProcess-config.MinProcess)time.Sleep(time.Duration(sleepTime*1000) * time.Millisecond)// 构造消息msg := message.BusinessMessage{ProcessName: b.Name(),TaskName:    task,TaskDetails: task,Timestamp:   float64(time.Now().UnixMilli()) / 1000,Status:      "success",}core.SendMsg(msg)}
}/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Fan-In Pattern Fan-In(扇入)模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/20 7:39
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : purchase.go
*/
package process// 原料采购
func NewPurchase() Process {return &BaseProcess{processName: "原料采购",tasks: []string{"采购1克拉南非钻石", "采购999足金500g", "采购红宝石10颗",},}
}/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Fan-In Pattern Fan-In(扇入)模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/20 7:39
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : design.go
*/
package process// 珠宝设计
func NewDesign() Process {return &BaseProcess{processName: "珠宝设计",tasks: []string{"钻戒款式设计", "项链3D建模", "手镯图纸审核",},}
}/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Fan-In Pattern Fan-In(扇入)模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/20 7:40
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : produce.go
*/
package process// 生产加工
func NewProduce() Process {return &BaseProcess{processName: "生产加工",tasks: []string{"钻石镶嵌加工", "黄金手镯抛光", "金饰铸造成型",},}
}/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Fan-In Pattern Fan-In(扇入)模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/20 7:41
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : quality.go
*/
package process// QC
func NewQuality() Process {return &BaseProcess{processName: "质量检测",tasks: []string{"黄金纯度检测", "钻石工艺检测", "珠宝鉴定证书出具",},}
}/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Fan-In Pattern Fan-In(扇入)模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/20 7:41
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : warehouse.go
*/
package process// 仓储管理
func NewWarehouse() Process {return &BaseProcess{processName: "仓储管理",tasks: []string{"钻戒入库登记", "黄金库存盘点", "宝石库存预警",},}
}/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Fan-In Pattern Fan-In(扇入)模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/20 7:42
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : sale.go
*/
package process// 营销销售
func NewSale() Process {return &BaseProcess{processName: "销售环节",tasks: []string{"线上钻戒售出", "门店黄金手镯售出", "珠宝批发订单发货",},}
}/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Fan-In Pattern Fan-In(扇入)模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/20 7:42
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : after_sale.go
*/
package process// 客户关系 CRM
func NewAfterSale() Process {return &BaseProcess{processName: "客户关系",tasks: []string{"钻戒免费清洗", "项链维修", "黄金首饰保养",},}
}

  

调用:

/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Fan-In Pattern Fan-In(扇入)模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/20 7:44
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : faninbll.go
*/
package bllimport ("fmt""godesginpattern/fanin/core""godesginpattern/fanin/process""sync"
)// 加载所有业务流程(扩展只需在这里添加)
func getAllProcesses() []process.Process {return []process.Process{process.NewPurchase(),process.NewDesign(),process.NewProduce(),process.NewQuality(),process.NewWarehouse(),process.NewSale(),process.NewAfterSale(),}
}
func FanInMain() {fmt.Println("🚀 企业级珠宝 Fan-In 业务系统启动...\n")// 1. 启动接收器go core.Sink.Run()// 2. 启动所有业务 goroutinevar wg sync.WaitGroupprocessList := getAllProcesses()wg.Add(len(processList))for _, p := range processList {go func(pro process.Process) {defer wg.Done()pro.Execute()}(p)}// 3. 等待所有业务完成wg.Wait()// 4. 发送结束信号core.SendEndSignal()// 5. 等待接收器输出完成close(core.FanInChan)fmt.Println("\n🎉 系统全部执行完成!")}

  

输出:

 

dce3973b722f380c082f49133d3270e6

 

http://www.jsqmd.com/news/1047235/

相关文章:

  • UE5-MCP技术解密:如何用AI原生架构重构虚幻引擎5开发范式
  • Vue Json Pretty:5分钟构建专业JSON可视化界面的终极方案
  • 从M68HC11E实战解析8位MCU架构:寄存器、外设与低功耗设计
  • [MySQL] 深度剖析:mysqld启动报错‘binlog.index‘缺失的权限迷局与根治方案
  • 终极鼠标轨迹追踪指南:可视化你的数字行为模式
  • 重庆黄金回收避坑2026|多数用户遇压价 无资质回收需谨慎 - 名奢变现站
  • 贵阳斜视养护调理
  • 四川商业摄影职业培训学校 TOP10,2026年6月成都摄影学校排行榜 - 教育信息网
  • 大师兄小论文剖析
  • 深入解析LPC408x/7x外设与电源管理:从原理到低功耗实战
  • 经典8位MCU MC68HC908SR12架构解析与嵌入式开发实战
  • 租车企业哪家好?温州聚游汽车服务的口碑与实力解读 - mypinpai
  • nginx 发布1.31.2 了
  • 深入解析ADC12B_LBA列表驱动架构与MSCAN模块在嵌入式系统中的应用
  • 5分钟上手Deep3D:让普通视频瞬间拥有3D立体感的魔法转换
  • MC68F375 TPU SIOP功能深度解析:从原理到工程实践
  • 华硕主板用户必看:FanControl传感器识别问题的3步终极解决方案
  • 从“小山丘”到米家生态:西蒙电气智能灯具如何重塑品质生活 - 速递信息
  • 源头GEO优化服务商推荐 :AI平台GEO优化原生服务商 靠谱 - 真知灼见33
  • REPENTOGON完全指南:解锁《以撒的结合》终极MOD体验
  • 终极屏幕翻译工具使用指南:5分钟快速上手开源翻译软件
  • 恩智浦S12ZVHY电机控制器MC10B8CV1配置详解:PWM对齐、续流与抖动
  • 卡梅德生物技术快报|噬菌体表面展示 + 酵母展示实操流水线,双系统衔接标准化操作手册
  • REPENTOGON终极安装指南:5分钟搞定《以撒的结合》最强脚本扩展器
  • Silk v3解码器终极指南:3分钟快速转换微信语音为MP3格式
  • Python毕设项目:基于 Python 的贫困助学资源统筹管理系统的设计与实现 数字化校园贫困生资助服务管理系统 (源码+文档,讲解、调试运行,定制等)
  • Playwright与LLM结合:构建智能自愈UI自动化测试框架
  • MC68HC908中断机制深度解析:IRQ与KBI模块实战指南
  • 物流仓储行业通信升级,黑龙江园区仓储与干线运输
  • 南京一对一婚纱摄影服务实测:MT视觉颐和路梧桐下的定制化婚拍体验 - 速递信息