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

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
博客园_首页
Forbes - Security
Forbes - Security
WordPress大学
WordPress大学
P
Proofpoint News Feed
T
Threat Research - Cisco Blogs
L
LINUX DO - 热门话题
L
Lohrmann on Cybersecurity
Spread Privacy
Spread Privacy
D
Darknet – Hacking Tools, Hacker News & Cyber Security
大猫的无限游戏
大猫的无限游戏
博客园 - 三生石上(FineUI控件)
P
Privacy International News Feed
A
About on SuperTechFans
T
Tailwind CSS Blog
I
InfoQ
S
Securelist
云风的 BLOG
云风的 BLOG
罗磊的独立博客
Recent Announcements
Recent Announcements
T
The Exploit Database - CXSecurity.com
B
Blog RSS Feed
V
Visual Studio Blog
Know Your Adversary
Know Your Adversary
The GitHub Blog
The GitHub Blog
Jina AI
Jina AI
腾讯CDC
Cyberwarzone
Cyberwarzone
有赞技术团队
有赞技术团队
AWS News Blog
AWS News Blog
博客园 - 【当耐特】
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
F
Full Disclosure
S
Secure Thoughts
博客园 - 司徒正美
J
Java Code Geeks
Y
Y Combinator Blog
Google Online Security Blog
Google Online Security Blog
GbyAI
GbyAI
N
News and Events Feed by Topic
Help Net Security
Help Net Security
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Project Zero
Project Zero
T
Tenable Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Tor Project blog
MyScale Blog
MyScale Blog
Scott Helme
Scott Helme
小众软件
小众软件
K
Kaspersky official blog

博客园 - ®Geovin Du Dream Park™

go: Functional Options Pattern go:Timing Functions Pattern python: Timing Functions Pattern go: Steady-State Pattern python: Steady-State Pattern go: Handshaking Pattern python: Handshaking Pattern go: Fail-Fast Pattern python: Fail-Fast Pattern I go: Deadline Pattern python: Deadline Pattern go: Circuit-Breaker Pattern python: Circuit-Breaker Pattern go: Bulkheads Pattern python: Bulkheads Pattern go: Push & Pull Pattern python: Push & Pull Pattern python: Publish/Subscribe Pattern II go: Publish/Subscribe Pattern python: Publish/Subscribe Pattern go: Futures & Promises Pattern python: Futures & Promises Pattern go: Worker Pool Pattern go:Pipeline Pattern python: Worker Pool Pattern python: Pipeline Pattern go: Fan-Out Pattern python: Fan-Out Pattern python: Fan-In Pattern Fan-In go: Producer Consumer  Pattern python: Producer Consumer Pattern go: Parallelism Pattern python: Parallelism Pattern go: Reactor Pattern python: Reactor Pattern go: Generators Pattern python: speech to text offline python: Generators Pattern go: Coroutines Pattern python:Coroutines Pattern go: Broadcast Pattern python: Broadcast Pattern python: Bounded Parallelism Pattern go: Bounded Parallelism Pattern python: N-Barrier Pattern go: N-Barrier Pattern python: Semaphore Pattern go: Semaphore Pattern python: Read-Write Lock Pattern go: Read-Write Lock Pattern python: Monitor Pattern go: Monitor Pattern python: Mutex Pattern go: Lock/Mutex Pattern Python: Condition Variable Pattern go:Condition Variable Pattern python: Registry Pattern python: Interpreter Pattern go: Interpreter Pattern go: Registry Pattern go: Memento Pattern go: Command Pattern go: State Pattern go:Template Method Pattern go: Strategy Pattern go: Visitor Pattern go: Observer Pattern go: Mediator Pattern go: Iterator Pattern go: Chain of Responsibility Pattern go: Proxy Pattern go:Decorator Pattern go: Facade Pattern go: Flyweight Pattern go: Composite Pattern go: Singleton Pattern go: Prototype Pattern go: Bridge Pattern go: Adapter Pattern go: Builder Pattern 密码进行加盐哈希 using CSharp,Python,Go,Java go: Abstract Factory Pattern go: Model,Interface,DAL ,Factory,BLL using mysql go: Simple Factory Pattern go: Factory Method Pattern go: goLang 在Windows环境搭建Go语言开发环境 CSharp: Parallel Extensions cpp: class python: 蝴蝶跟随鼠标 javascript: 中国历史人物热力分布图using echart javascript: 中国历史人物热力图 python: 初养龙虾微信纯文字自动回复using workBuddy python: object 入门 python: Factory Method Pattern python: Simple Factory Pattern python: Abstract Factory Pattern 区域化 代码 python: Null Object Pattern python: Builder Pattern python: Adapter Pattern
go: Fan-In Pattern
®Geovin Du Dream Park™ · 2026-06-20 · via 博客园 - ®Geovin Du Dream Park™

项目结构:

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 core

import (
	"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 core

import (
	"fmt"
	"godesginpattern/fanin/config"
	"godesginpattern/fanin/message"
	"time"
)

// 工作接收器
// WorkSink 数据中心接收器(单例)
type WorkSink struct {
	TotalCount  int
	ProcessStat 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 process

import (
	"godesginpattern/fanin/config"
	"godesginpattern/fanin/core"
	"godesginpattern/fanin/message"
	"math/rand"
	"time"
)

//业务基类

// Process 业务接口(所有业务环节必须实现)
type Process interface {
	Name() string
	TaskList() []string
	Execute()
}

// Prcess 基础业务逻辑
type BaseProcess struct {
	processName string
	tasks       []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 bll

import (
	"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. 启动所有业务 goroutine
	var wg sync.WaitGroup
	processList := 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

哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)