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

推荐订阅源

T
Threatpost
aimingoo的专栏
aimingoo的专栏
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Tailwind CSS Blog
J
Java Code Geeks
博客园_首页
Google Online Security Blog
Google Online Security Blog
Hugging Face - Blog
Hugging Face - Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
I
Intezer
P
Palo Alto Networks Blog
V
Vulnerabilities – Threatpost
雷峰网
雷峰网
O
OpenAI News
SecWiki News
SecWiki News
小众软件
小众软件
酷 壳 – CoolShell
酷 壳 – CoolShell
美团技术团队
N
News | PayPal Newsroom
Project Zero
Project Zero
Forbes - Security
Forbes - Security
IT之家
IT之家
A
Arctic Wolf
WordPress大学
WordPress大学
Jina AI
Jina AI
T
Tor Project blog
博客园 - 三生石上(FineUI控件)
S
Secure Thoughts
Google DeepMind News
Google DeepMind News
Attack and Defense Labs
Attack and Defense Labs
博客园 - 聂微东
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Privacy International News Feed
Cloudbric
Cloudbric
G
GRAHAM CLULEY
博客园 - 叶小钗
H
Hacker News: Front Page
腾讯CDC
量子位
Help Net Security
Help Net Security
人人都是产品经理
人人都是产品经理
C
Cyber Attacks, Cyber Crime and Cyber Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
宝玉的分享
宝玉的分享
爱范儿
爱范儿
L
Lohrmann on Cybersecurity
Hacker News - Newest:
Hacker News - Newest: "LLM"
Recorded Future
Recorded Future
C
CERT Recently Published Vulnerability Notes

博客园 - ®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 go: Fan-In 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 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: N-Barrier Pattern
®Geovin Du Dream Park™ · 2026-05-26 · via 博客园 - ®Geovin Du Dream Park™

项目结构:

image

/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:N-Barrier Pattern 屏障模式
# 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/5/26 22:06
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : config.go
*/
package config

import "time"

// AppConfig 全局生产配置
type AppConfig struct {
	// 生产阶段
	ProductionSteps   int
	ProductionTimeout time.Duration

	// 入库阶段
	WarehouseSteps   int
	WarehouseTimeout time.Duration

	// 发货阶段
	DeliverySteps   int
	DeliveryTimeout time.Duration

	// 重试
	MaxRetryCount int
	RetryInterval time.Duration
}

func Load() *AppConfig {
	return &AppConfig{
		ProductionSteps:   5,
		ProductionTimeout: 10 * time.Second,

		WarehouseSteps:   5,
		WarehouseTimeout: 5 * time.Second,

		DeliverySteps:   1,
		DeliveryTimeout: 3 * time.Second,

		MaxRetryCount: 2,
		RetryInterval: 500 * time.Millisecond,
	}
}




/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:N-Barrier Pattern 屏障模式
# 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/5/26 22:07
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : logger.go
*/
package logger

import (
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
)

var log *zap.Logger

func Init() {
	config := zap.NewProductionConfig()
	config.EncoderConfig.TimeKey = "time"
	config.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
	config.DisableCaller = true

	l, _ := config.Build()
	log = l
}

func Info(msg string, fields ...zap.Field) {
	log.Info(msg, fields...)
}

func Error(msg string, fields ...zap.Field) {
	log.Error(msg, fields...)
}

func Debug(msg string, fields ...zap.Field) {
	log.Debug(msg, fields...)
}

func With(fields ...zap.Field) *zap.Logger {
	return log.With(fields...)
}

func Sync() {
	_ = log.Sync()
}
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:N-Barrier Pattern 屏障模式
# 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/5/26 22:06
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : barrier.go
*/
package barrier

import "sync"

// StageBarrier 多阶段屏障
type StageBarrier struct {
	wg    *sync.WaitGroup
	stage string
}

func NewStageBarrier(n int, stage string) *StageBarrier {
	wg := &sync.WaitGroup{}
	wg.Add(n)
	return &StageBarrier{wg: wg, stage: stage}
}

func (s *StageBarrier) Done() {
	s.wg.Done()
}

func (s *StageBarrier) Wait() {
	s.wg.Wait()
}

func (s *StageBarrier) Stage() string {
	return s.stage
}




/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:N-Barrier Pattern 屏障模式
# 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/5/26 22:08
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : model.go
*/
package model

import "time"

// Step 珠宝生产步骤
type Step string

const (
	StepPurchase  = Step("原料采购")
	StepDesign    = Step("款式设计")
	StepProcess   = Step("工艺加工")
	StepQuality   = Step("品质质检")
	StepPackaging = Step("成品包装")
)

// WarehouseStep 入库步骤
type WarehouseStep string

const (
	WarehouseCheck   = WarehouseStep("入库核验")
	WarehouseLabel   = WarehouseStep("贴标入仓")
	WarehouseStock   = WarehouseStep("库存更新")
	WarehousePhoto   = WarehouseStep("成品拍照")
	WarehouseArchive = WarehouseStep("档案归档")
)

// DeliveryStep 发货步骤
type DeliveryStep string

const (
	DeliveryShip = DeliveryStep("批量发货")
)

// TaskResult 任务执行结果
type TaskResult struct {
	Stage   string
	Step    string
	Cost    time.Duration
	Success bool
	Retry   int
	Error   error
}

// GetProductionSteps 获取生产步骤
func GetProductionSteps() []Step {
	return []Step{StepPurchase, StepDesign, StepProcess, StepQuality, StepPackaging}
}

// GetWarehouseSteps 获取入库步骤
func GetWarehouseSteps() []WarehouseStep {
	return []WarehouseStep{WarehouseCheck, WarehouseLabel, WarehouseStock, WarehousePhoto, WarehouseArchive}
}

// GetDeliverySteps 获取发货步骤
func GetDeliverySteps() []DeliveryStep {
	return []DeliveryStep{DeliveryShip}
}

// GetStepDuration 步骤耗时
func GetStepDuration(anyStep any) time.Duration {
	switch s := anyStep.(type) {
	case Step:
		switch s {
		case StepPurchase:
			return 2 * time.Second
		case StepDesign:
			return 3 * time.Second
		case StepProcess:
			return 4 * time.Second
		case StepQuality:
			return 2 * time.Second
		case StepPackaging:
			return 1 * time.Second
		}
	case WarehouseStep:
		return 1 * time.Second
	case DeliveryStep:
		return 2 * time.Second
	}
	return 1 * time.Second
}


/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:N-Barrier Pattern 屏障模式
# 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/5/26 22:09
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : collector.go
*/
package result

import (
	"godesginpattern/nbarrier/jewelry/model"
	"sync"
)

type Collector struct {
	mu      sync.Mutex
	results []model.TaskResult
}

func NewCollector() *Collector {
	return &Collector{}
}

func (c *Collector) Add(res model.TaskResult) {
	c.mu.Lock()
	defer c.mu.Unlock()
	c.results = append(c.results, res)
}

func (c *Collector) All() []model.TaskResult {
	c.mu.Lock()
	defer c.mu.Unlock()
	return c.results
}

func (c *Collector) SuccessCount() int {
	c.mu.Lock()
	defer c.mu.Unlock()
	count := 0
	for _, r := range c.results {
		if r.Success {
			count++
		}
	}
	return count
}
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:N-Barrier Pattern 屏障模式
# 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/5/26 22:09
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : worker.go
*/
package worker

import (
	"context"
	"go.uber.org/zap"
	"godesginpattern/nbarrier/barrier"
	"godesginpattern/nbarrier/common/logger"
	"godesginpattern/nbarrier/jewelry/model"
	"godesginpattern/nbarrier/result"
	"time"
)

type Task interface {
	Run(ctx context.Context) (model.TaskResult, error)
}

func RunWithRetryAndTimeout(
	ctx context.Context,
	task Task,
	b *barrier.StageBarrier,
	collector *result.Collector,
	maxRetry int,
	retryInterval time.Duration,
) {
	go func() {
		defer b.Done()

		stepLog := logger.With(zap.String("stage", b.Stage()))
		var res model.TaskResult

		for retry := 0; retry <= maxRetry; retry++ {
			select {
			case <-ctx.Done():
				stepLog.Error("任务超时取消", zap.Int("retry", retry))
				return
			default:
			}

			result, err := task.Run(ctx)
			result.Retry = retry
			result.Stage = b.Stage()

			if err == nil {
				res = result
				stepLog.Info("步骤完成",
					zap.String("step", result.Step),
					zap.Duration("cost", result.Cost),
					zap.Int("retry", retry))
				break
			}

			stepLog.Error("步骤执行失败",
				zap.String("step", result.Step),
				zap.Int("retry", retry),
				zap.Error(err))

			if retry == maxRetry {
				res = result
				break
			}

			time.Sleep(retryInterval)
		}

		collector.Add(res)
	}()
}
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:N-Barrier Pattern 屏障模式
# 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/5/26 22:11
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : service.go
*/
package service

import (
	"context"
	"go.uber.org/zap"
	"godesginpattern/nbarrier/common/logger"
	"godesginpattern/nbarrier/jewelry/model"
	"time"
)

type JewelryService struct{}

func NewJewelryService() *JewelryService {
	return &JewelryService{}
}

// ---------------- 生产任务 ----------------
type ProductionTask struct {
	Step model.Step
}

func (t *ProductionTask) Run(ctx context.Context) (model.TaskResult, error) {
	start := time.Now()
	dur := model.GetStepDuration(t.Step)

	logger.Info("开始生产步骤", zap.String("step", string(t.Step)))
	time.Sleep(dur)

	return model.TaskResult{
		Step:    string(t.Step),
		Cost:    time.Since(start),
		Success: true,
	}, nil
}

// ---------------- 入库任务 ----------------
type WarehouseTask struct {
	Step model.WarehouseStep
}

func (t *WarehouseTask) Run(ctx context.Context) (model.TaskResult, error) {
	start := time.Now()
	dur := model.GetStepDuration(t.Step)

	logger.Info("开始入库步骤", zap.String("step", string(t.Step)))
	time.Sleep(dur)

	return model.TaskResult{
		Step:    string(t.Step),
		Cost:    time.Since(start),
		Success: true,
	}, nil
}

// ---------------- 发货任务 ----------------
type DeliveryTask struct {
	Step model.DeliveryStep
}

func (t *DeliveryTask) Run(ctx context.Context) (model.TaskResult, error) {
	start := time.Now()
	dur := model.GetStepDuration(t.Step)

	logger.Info("开始发货步骤", zap.String("step", string(t.Step)))
	time.Sleep(dur)

	return model.TaskResult{
		Step:    string(t.Step),
		Cost:    time.Since(start),
		Success: true,
	}, nil
}

调用:

/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:N-Barrier Pattern 屏障模式  go get -u go.uber.org/zap
#
# 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/5/26 22:30
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : nbarrierbll.go

barrier/
├── go.mod
├── go.sum
├── main.go    # 入口:依赖注入+启动
├── config/
│   └── config.go             # 全局配置
├──
│   ├── barrier/              # 多阶段屏障核心
│   │   └── barrier.go
│   ├── jewelry/              # 珠宝业务域
│   │   ├── model/            # 模型+枚举
│   │   └── service/          # 业务逻辑
│   ├── pkg/                  # 内部公共包
│   │   ├── logger/           # zap日志
│   │   └── worker/           # 并发+重试+超时
│   └── result/               # 结果收集器
└── scripts/                  # 部署脚本(预留)
*/
package bll

import (
	"context"
	"go.uber.org/zap"
	"godesginpattern/nbarrier/barrier"
	"godesginpattern/nbarrier/common/logger"
	"godesginpattern/nbarrier/common/worker"
	"godesginpattern/nbarrier/config"
	"godesginpattern/nbarrier/jewelry/model"
	"godesginpattern/nbarrier/jewelry/service"
	"godesginpattern/nbarrier/result"
	"os/signal"
	"syscall"
	"time"
)

func NbarrierMain() {
	// 初始化日志
	logger.Init()
	defer logger.Sync()

	// 加载配置
	cfg := config.Load()

	// 优雅关闭
	ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
	defer stop()

	logger.Info("=== 珠宝全流程生产系统启动 ===")
	logger.Info("配置加载完成",
		zap.Int("生产步骤", cfg.ProductionSteps),
		zap.Int("入库步骤", cfg.WarehouseSteps),
		zap.Int("重试次数", cfg.MaxRetryCount))

	// 结果收集器
	collector := result.NewCollector()

	// ==========================================
	// 阶段1:生产屏障
	// ==========================================
	prodCtx, cancel1 := context.WithTimeout(ctx, cfg.ProductionTimeout)
	defer cancel1()

	prodBarrier := barrier.NewStageBarrier(cfg.ProductionSteps, "生产")
	steps := model.GetProductionSteps()

	for _, step := range steps {
		task := &service.ProductionTask{Step: step}
		worker.RunWithRetryAndTimeout(
			prodCtx, task, prodBarrier, collector,
			cfg.MaxRetryCount, cfg.RetryInterval)
	}

	logger.Info("=== 等待所有生产步骤完成 ===")
	prodBarrier.Wait()
	logger.Info("=== 【生产屏障通过】 ===")

	// ==========================================
	// 阶段2:入库屏障
	// ==========================================
	whCtx, cancel2 := context.WithTimeout(ctx, cfg.WarehouseTimeout)
	defer cancel2()

	whBarrier := barrier.NewStageBarrier(cfg.WarehouseSteps, "入库")
	whSteps := model.GetWarehouseSteps()

	for _, step := range whSteps {
		task := &service.WarehouseTask{Step: step}
		worker.RunWithRetryAndTimeout(
			whCtx, task, whBarrier, collector,
			cfg.MaxRetryCount, cfg.RetryInterval)
	}

	logger.Info("=== 等待所有入库步骤完成 ===")
	whBarrier.Wait()
	logger.Info("=== 【入库屏障通过】 ===")

	// ==========================================
	// 阶段3:发货屏障
	// ==========================================
	deliverCtx, cancel3 := context.WithTimeout(ctx, cfg.DeliveryTimeout)
	defer cancel3()

	dlBarrier := barrier.NewStageBarrier(cfg.DeliverySteps, "发货")
	dlSteps := model.GetDeliverySteps()

	for _, step := range dlSteps {
		task := &service.DeliveryTask{Step: step}
		worker.RunWithRetryAndTimeout(
			deliverCtx, task, dlBarrier, collector,
			cfg.MaxRetryCount, cfg.RetryInterval)
	}

	logger.Info("=== 等待发货完成 ===")
	dlBarrier.Wait()
	logger.Info("=== 【发货屏障通过】 ===")

	// ==========================================
	// 最终汇总
	// ==========================================
	time.Sleep(300 * time.Millisecond)
	logger.Info("========================================")
	logger.Info("✅ 全流程完成",
		zap.Int("总任务数", len(collector.All())),
		zap.Int("成功数", collector.SuccessCount()))
	logger.Info("✅ 珠宝成品 → 生产 → 入库 → 发货 全流程完成")
	logger.Info("========================================")
}

输出:

image

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