当前位置: 首页 > 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.gsyq.cn/news/1559146.html

相关文章:

  • 终极鼠标轨迹追踪指南:可视化你的数字行为模式
  • 四川商业摄影职业培训学校 TOP10,2026年6月成都摄影学校排行榜 - 教育信息网
  • 深入解析ADC12B_LBA列表驱动架构与MSCAN模块在嵌入式系统中的应用
  • 5分钟上手Deep3D:让普通视频瞬间拥有3D立体感的魔法转换
  • 华硕主板用户必看:FanControl传感器识别问题的3步终极解决方案
  • REPENTOGON完全指南:解锁《以撒的结合》终极MOD体验
  • 恩智浦S12ZVHY电机控制器MC10B8CV1配置详解:PWM对齐、续流与抖动
  • MC68HC908中断机制深度解析:IRQ与KBI模块实战指南
  • Python毕设项目:基于 Python 的贫困助学资源统筹管理系统的设计与实现 数字化校园贫困生资助服务管理系统 (源码+文档,讲解、调试运行,定制等)
  • 深入解析MC68HC08KH12A内存映射与中断系统:嵌入式底层开发核心
  • 《剑与翼》最新安全下载官网:2026年6月剑与翼唯一官网渠道
  • Inkscape光线追踪终极指南:如何5分钟内创建专业光学设计图
  • MC68HC908GZ SPI中断机制深度解析与实战配置指南
  • 深入解析NXP S12XS TIM16B8CV2定时器:从架构到实战应用
  • MC68HC908MR24 ADC模块详解:数据对齐与时钟配置实战
  • HERMES本地AI Agent实战:oMLX+DeepSeek轻量闭环工作流
  • AutoHotkey V2 如何突破脚本限制?ahk2_lib 原生扩展库实战指南
  • 2026昆明口碑好的摄影学校,昆明正规靠谱摄影学校推荐 - 教育信息网
  • 3分钟搭建本地语音识别系统:whisper.cpp终极入门指南
  • QQ截图独立版终极指南:无需QQ账号的免费截图神器完整教程
  • 如何用chan.py框架在30分钟内构建专业级缠论量化交易系统
  • 如何高效使用Maya权重平滑工具:5分钟掌握brSmoothWeights完整指南
  • 鸣潮自动化助手完全攻略:解放双手,轻松刷取声骸与日常任务
  • MC9S12 BDM硬件握手协议与ACK脉冲机制深度解析
  • 快速解密QQ音乐加密文件:qmcdump完整解决方案指南
  • 什么是GEO(生成式引擎优化)?一文看懂AI搜索时代的新流量逻辑
  • 2026昆山黄金回收实测测评|5 家本地正规门店横向对比,卖金避坑全指南 - 速递信息
  • 10大解决方案:sd-webui-reactor人脸交换插件深度故障排除指南
  • 在Obsidian中创建专业演示文稿:Advanced Slides插件终极指南
  • 4-流形中非定向曲面嵌入的法欧拉数约束研究